多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
了解如何定义和调用模型后,我们来具体了解下模型的使用。 模型和Db操作的一大显性区别就是一个是对象操作和一个是数组操作,下面以一个user数据表的查询、取值、设置和更新的例子,来说明下两种方式的区别。 首先回顾下Db类的用法: ~~~ // 查询操作 $user = Db::table('user')->find(1); // 取值操作 echo $user['name']; echo $user['email']; // 设置操作 $user['name'] = 'topthink'; $user['email'] = 'thinkphp@qq.com'; // 更新操作 Db::table('user')->update($user); ~~~ 如果是模型操作的话,可以: ~~~ // 查询操作 $user = User::get(1); // 取值操作 echo $user->name; echo $user->email; // 设置操作 $user->name = 'topthink'; $user->email = 'thinkphp@qq.com'; // 更新操作 $user->save(); ~~~ 由于模型类实现了ArrayAccess接口,因此一样可以使用数组方式操作: ~~~ // 查询操作 $user = User::get(1); // 取值操作 echo $user['name']; echo $user['email']; // 设置操作 $user['name'] = 'topthink'; $user['email'] = 'thinkphp@qq.com'; // 更新操作 $user->save(); ~~~ 如果是在模型内部进行取值和设置操作怎么办?正确的获取方式应该是: ~~~ // 模型内部读取数据 echo $this->getData('name'); echo $this->getAttr('email'); // 模型内部设置数据 $this->data('name','thinkphp'); $this->setAttr('email','thinkphp@qq.com'); ~~~ 以name属性为例,获取模型数据的方式有下列三种: |场景|方法| | --- | --- | |外部获取模型数据|$model->name| |内部获取模型数据|$this->getAttr('name')| | 内部获取(原始)模型数据|$this->getData('name')| getData和getAttr方法的区别前者是原始数据,后者是经过读取器处理的数据,如果没有定义数据读取器的话,两个方法的结果是相同的。 对应的设置模型数据的方式也有三种: |场景|方法| | --- | --- | |外部设置模型数据|$model->name='thinkphp'| |内部设置模型数据(经过修改器)|$this->setAttr('name','thinkphp')| |内部设置模型数据|$this->data('name','thinkphp')| data和setAttr方法的区别前者是赋值最终数据,后者赋值的数据还会经过修改器处理,如果没有定义修改器的话,两个方法的结果是相同的。 对象化操作的神奇是可以级联读取或者设置,例如: ~~~ // 查询操作 $user = User::get(1); // 取值操作 echo $user->name; echo $user->email; // 关联取值 echo $user->role->name; echo $user->contact->phone; // 设置操作 $user->name = 'topthink'; $user->email = 'thinkphp@qq.com'; // 更新操作 $user->save(); // 关联设置 $user->role->name = 'admin'; $user->role->save(); $user->contact->phone = '123456789'; $user->contact->save(); ~~~