thinkphp6---一对一关联

使用Thinkphp6开发项目,一对一关联查询应该是使用比较多的了,下面做一个简单的记录:

首先是栏目表:admin_category

其次是文章表:article

首先是两个模型:

做关联查询的模块,可以是空模型:

查询文章,关联栏目:

关联查询:hasOne

hasOne('关联模型类名', '外键', '主键');

关联模型类名(必须):关联模型名

外键:默认的外键规则是当前模型名(不含命名空间,下同)+_id ,例如user_id

主键:当前模型主键,默认会自动获取也可以指定传入 

理解:在进行建表的时候,例如:
主表:article 字段:id cate_id title
附表:category 字段:cate_id title
通过cate_id对表进行关联,在进行查询的时候,写法是这样的:
hasOne(category::class,cate_id(外键))
但是我们通常建表会这样建立:
主表:article 字段:id cid title
附表:category 字段:id title
这样建表,cid指向的就是附表的主键id,当前模型的主键就是cid。主键:是指一列或多列,其值能够唯一标识某一行。
hasOne(category::class,id,cid)

通过这样查询,我们获得的数组是一个二维数组,其中category中包括完整的数据结构,我们只需要某几个字段,可以设置闭包约束:

$users = User::with(['profile' => function($query) {
    $query->field('id,user_id,name,email');
}])->select();

附表关联主表做查询:例如:我想查询每一个栏目下都有哪些文章

使用:belongsTo进行关联查询

belongsTo('关联模型','外键', '关联主键');

关联模型(必须):关联模型类名
外键:当前模型外键,默认的外键名规则是关联模型名+_id
关联主键:关联模型主键,一般会自动获取也可以指定传入

示例:

具体查询方法:

到此一对多的基础用法就完了。

posted @ 2021-09-12 17:18  帅到要去报警  阅读(692)  评论(0编辑  收藏  举报