THINKpHp5的基本模型关联

发布时间:2025-11-28 点击:4
1.创建thinkphp模型用cmd指令在文件根目录下创建模型
php think make:model 模块/模型名称
模型会创建在application目录下的 “模块\模型[模型名称]” 中。
2.模型命名
模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,比如表的表前缀是db_在模型名称里就需要省略掉。所以db_admin表的模型类名就是admin,db_admin_message的模型类名就是adminmessage
3.一对一关联
hasone(‘关联模型名’,‘关联外键’,‘主键’,‘别名定义’, ‘join类型’)
关联操作都是基于(第一)模型的话,(第二)模型中并不需要定义关联方法,使用belongsto 方法就可以。
belongsto 方法和 hasone 一样,也有5个参数:
belongsto(‘关联模型名’,‘关联外键’,‘关联模型主键’,‘别名定义’,‘join类型’)
a.模型定义
//定义关联方法,在user模型哄下定义publicfunctionprofile(){//hasone关联return$this->hasone('profile','id','id');}在user模型定义好关联的方法之后在profile模型里可以不用写任何对应的方法,但是必须最少要有一个对应db_profile 表的空模型。
b.倘若关联操作都基于profile方法时,在profile模型下定义
publicfunctionuser(){//档案belongsto关联操作都基于profile方法时,直接使用return$this->belongsto('user');}c.控制器调用
publicfunctionindex($name='name'){//get1是获取id为1的数据//find()是查找//toarray()是获取到的数据转为数组$admin=admin::get(1);//查巡当前admin模型数据var_dump($admin->find()->toarray());//查巡关联模型adminmessage模型数据$admin=$admin->adminmessage->find()->toarray();}d.输出结果:
4.一对多关联hasmany(‘关联模型名’,‘关联外键’,‘关联模型主键’,‘别名定义’)
a.模型调用
publicfunctionbooks(){return$this->hasmany('book','id','id');}b.控制器调用
关联添加:也可以批量增加数据
关联查询:可以直接调用模型的属性获取全部关联数据
publicfunctionread(){$user=usermodel::get(1);//获取状态为1的关联数据$books=$user->books()->where('status',1)->select();dump($books);//获取作者写的某本书$book=$user->books()->getbytitle('thinkphp5快速入门');dump($book);}
关联更新:
publicfunctionupdate($id){$user=usermodel::get($id);$book=$user->books()->getbytitle('thinkphp5开发手册');$book->title='thinkphp5快速入门';$book->save();}
关联删除:
//删除部分关联数据:$book=$user->books()->getbytitle('thinkphp5开发手册');$book->delete();//删除所有的关联数据:if($user->delete()){//删除所有的关联数据$user->books()->delete();}
5.多对多关联一个用户会有多个角色,同时一个角色也会包含多个用户,这就是一个典型的多对多关联
多对多关联通常一定会有一个中间表,也称为枢纽表,所以需要创建一个用户角色的中间表
belongstomany 的参数如下
belongstomany(‘关联模型名’,‘中间表名称’,‘关联外键’,‘关联模型主键’,‘别名定义’)
对于枢纽表并不需要创建模型类,在多对多关联关系中,并不需要直接操作枢纽表。
a.模型定义
//定义多对多关联publicfunctionroles(){//用户belongs_to_many角色return$this->belongstomany('role','think_access');}
关联新增
新增用户角色 并自动写入枢纽表
$user->roles()->save(['name' => 'editor', 'title' => '编辑']);
批量新增
$user->roles()->saveall([['name'=>'leader','title'=>'领导'],['name'=>'admin','title'=>'管理员'],]);由于该角色已经存在了,所以只需要使用attach 方法增加枢纽表的关联数据:
$user->roles()->attach($role);
关联删除
使用detach 方法删除关联的枢纽表数据,但不会删除关联模型数据
$user->roles()->detach($role);
删除枢纽表的同时删除关联模型
$user->roles()->detach($role,true);
6.模型输出输出数组: toarray 方法把模型对象输出为数组。
$user->toarray()
隐藏属性:hidden方法在输出的时候隐藏某些属性
模型名->方法([字段名称,字段名称,***]) $user->hidden(['create_time','update_time'])->toarray()
指定属性:visible方法指定一些属性输出
模型名->方法([字段名称,字段名称,***])
$user->visible(['id','nickname','email'])->toarray()
追加属性
如果读取器定义了一些非数据库字段的读取,例如:
classuserextendsmodel{//status修改器protectedfunctiongetuserstatusattr($value){$status=[-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];return$status[$value];&n

上海网站seo优化:五个方面提高SEO人员自身优化技术
网站建设:建站后为什么要ssl证书
长沙营销型网站建设后期盈利很重要
网站建设,企业网站如何减少跳出率?
重庆企业网站建设及营销推广的5大常见问题
企业网站建设明确社交媒体在档案网站信息服务中的定位
深圳企业网站如何去制作
百度不收录原因是什么?