public function 被关联的模型名小写(){ return $this -> hasOne(‘须要关联模型的命名空间’,’被关联模型的关系字段,’本模型中的关系字段’); }
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 用户的角色 */ public function roles() { return $this->belongsToMany('App\Role'); } } 一旦关联关系被定义后,你能够经过 roles 动态属性获取用户角色: $user = App\User::find(1); foreach ($user->roles as $role) { // } 固然,像其它全部关联模型同样,你可使用 roles 方法,利用链式调用对查询语句添加约束条件: $roles = App\User::find(1)->roles()->orderBy('name')->get();
关联模型就是绑定模型(表)的关系(关联表),后续须要使用联表的时候就能够直接使用关联模型。注意:关联模型必需要建立模型。php
例如:一篇文章只有一个做者测试
①建立模型【前提】this
#php artisan make:model Home/Articlespa
#php artisan make:model Home/Author3d
②定义基本的结构代码code
③关联模型的关联方法(重点)blog
注意:在写关联模型的时候要分析出是谁关联谁,谁作主动关联的模型?当前的案例是文章关联做者,须要关联代码写在主模型中。教程
语法:路由
public function 被关联的模型名小写(){get
return $this -> hasOne(‘须要关联模型的命名空间’,’被关联模型的关系字段,’本模型中的关系字段’);
}
关联关系的使用方法:使用动态属性进行调用
案例:经过关联模型的一对一关系查询出每一个文章对应的做者名称
①定义须要的路由
②建立须要的方法
使用一对一关联关系以后,其能够替代以前写join联表操做。
例如:一篇文章有多个评论
因为文章和评论的关系是一对多的关系,因此须要再去建立一个数据表(评论表):
字段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方法相比,其只是把方法名称作了变化,其余与以前一致。
编写test22方法实现上述案例的要求:
操做代码:
效果:
例如:一个文章可能有多个关键词,一个关键词可能被多个文章使用。
当点开关键词连接以后,会发现一个关键下能搜出不少文章。
所以,文章和关键词之间是多对多的关系。
对对多的关系通过拆分以后其实就是两个一对多的关系。因为是双向一对多的关系,所以光靠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(被关联模型的元素空间路径,多对多模型的关系表名,当前模型中的关系键,被关联模型的关系键);
根据案例的要求,此处的关系映射依旧写在文章模型中
编写test23方法,实现刚才案例的须要:
显示效果: