Laravel框架中关联模型操作

关联模型(重点+难点)

关联模型就是绑定模型(表)的关系(关联表),后续需要使用联表的时候就可以直接使用关联模型。注意:关联模型必须要创建模型。

1、一对一关系

例如:一篇文章只有一个作者

①创建模型【前提】

#php artisan make:model Home/Article
#php artisan make:model Home/Author

在这里插入图片描述
在这里插入图片描述

②定义基本的结构代码
在这里插入图片描述在这里插入图片描述

③关联模型的关联方法(重点)
注意:在写关联模型的时候要分析出是谁关联谁,谁做主动关联的模型?当前的案例是文章关联作者,需要关联代码写在主模型中。
语法:

public function 被关联的模型名小写()
{ return $this ->hasOne(‘需要关联模型的命名空间’,’被关联模型的关系字段,’本模型中的关系字段’); }

在这里插入图片描述

关联关系的使用方法:使用动态属性进行调用
在这里插入图片描述

案例:通过关联模型的一对一关系查询出每个文章对应的作者名称
①定义需要的路由
在这里插入图片描述

②创建需要的方法

在这里插入图片描述在这里插入图片描述

使用一对一关联关系之后,其可以替代之前写join联表操作。

2、一对多关系

例如:一篇文章有多个评论

由于文章和评论的关系是一对多的关系,所以需要再去创建一个数据表(评论表):
字段id 主键
字段comment 评论内容
字段article_id 和文章的关系字段,文章id
①迁移文件的创建

#php artisan make:migration create_comment_table

在这里插入图片描述

②编写迁移文件代码

在这里插入图片描述

③执行迁移文件生成数据表

#php artisan migrate

在这里插入图片描述

④添加测试的评论内容
a. 创建填充器文件

#php artisan make:seeder CommentTableSeeder

在这里插入图片描述

b. 编写填充器文件的代码

在这里插入图片描述

c. 执行填充器文件

#php artisan db:seed --class=CommentTableSeeder

在这里插入图片描述

⑤评论模型创建起来

#php artisan make:model Home/Comment

定义其基本的属性:
在这里插入图片描述

案例:查询出每个文章(主)下所有的评论(从)。
关联关系的编写:

public function 被关联的模型名小写(){
return $this ->hasMany(‘需要关联模型的命名空间’,’被关联模型的关系字段,’本模型中的关系字段’); }

与hasOne方法相比,其只是把方法名称做了变化,其他与之前一致。
在这里插入图片描述

编写test20方法实现上述案例的要求:
操作代码:
在这里插入图片描述

效果:

在这里插入图片描述

3、多对多关系

例如:一个文章可能有多个关键词,一个关键词可能被多个文章使用。

当点开关键词链接之后,会发现一个关键下能搜出很多文章。

因此,文章和关键词之间是多对多的关系。

对对多的关系经过拆分之后其实就是两个一对多的关系。由于是双向一对多的关系,因此光靠2张表是无法建立的关系的,需要依靠第三张表建立关系(xx与xx的关系表)。

当前已经存在文章表,因此还需要关键词表和关系表。

关键词表:
字段id 主键
字段keyword 关键词

文章与关键词的关系表:
字段id 主键
字段article_id 文章id
字段key_id 关键词id

简易模拟:
Id 关键词 id 文章id 关键词id
1 张杰 1 1 1
2 演唱会 2 1 2
3 2 1

①创建需要迁移文件

#php artisan make:migration create_keyword_table
#php artisan make:migration create_relation_table

②编写迁移文件的代码

在这里插入图片描述
在这里插入图片描述

③执行迁移文件生成数据表

#php artisan migrate

在这里插入图片描述

④生成测试的数据

#php artisan make:seeder KeywordAndRelationTableSeeder

编写相关代码:
在这里插入图片描述

执行填充器文件:

#php artisan db:seed --class=KeywordAndRelationTableSeeder
在这里插入图片描述

⑤创建需要的模型
注意:根据手册中记录的语法要求,不需要给关系表单独的创建模型。
该处只需要单独给keyword创建模型即可

#php artisan make:model Home/Keyword

定义模型的基本内部结构
在这里插入图片描述

案例:查询出每个文章下全部的关键词

在这里插入图片描述

语法:
return $this -> belongsToMany(被关联模型的元素空间路径,多对多模型的关系表名,当前模型中的关系键,被关联模型的关系键);

根据案例的要求,此处的关系映射依旧写在文章模型中

在这里插入图片描述

编写test21方法,实现刚才案例的需要:
在这里插入图片描述

显示效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45062472/article/details/108467804
今日推荐