关联模型就是绑定模型(表)的关系(关联表), 后续需要使用联表的时候就可以直接使用关联模型 关键类: Illuminate\Database\Eloquent\Model
参考文档: [ Laravel 5.6 文档 ] Eloquent ORM —— 关联关系
一对一关系
定义一对一的关系 (A表的一条数据, 关联B表的一条数据)
// hasOne('被关联的模型', '被关联模型的关联字段', '本模型中的关联字段');HasOne hasOne(string $related, string $foreignKey = null, string $localKey = null)
示例代码:定义关联关系
/**
* 定义一对一关联方法 $this->hasOne('被关联的模型related', '被关联模型中的被关联字段名foreignKey',
'本模型中的关联字段名localKey');
* 1. 取出本模型对应表Article的author_id字段值,
* 2. 在关联模型related中, 查找字段名为author_id列中, 值与第1步所取值相等的那一行
* 3. 返回该行数据对应的 HasOne实例(可理解为关联模型实例)
*/
public function author() {
return $this->hasOne('App\Http\Model\Home\Author', 'id', 'author_id');
}
示例代码:执行关联查询
// 关联模型, 一对一的使用
public function oneToOne() {
// 获取Article表的数据, 以模型形式返回
$data = Article::get();
foreach ($data as $key => $value) {
// 每个 $value 都对应一行数据的Article模型
// 关联模型 -> 关联方法名(一对一), 返回"被关联模型"
$author = $value -> author;
echo $value -> id . " " .
$value -> article_name . " " .
// 从被关联模型中获取数据
$author -> author_name . "<br/>";
}
}
一对多关系
定义一对多的关系 (A表的一条数据, 关联B表的多条数据)
HasMany hasMany(string $related, string $foreignKey = null, string $localKey = null)
示例代码:定义关联关系
/**
* 定义一对多关联方法 $this->hasMany('被关联的模型', '被关联模型中的被关联字段名',
'本模型中的关联字段名');
* 1. 取出本模型对应表Article的author_id字段值,
* 2. 在关联模型related中, 查找字段名为author_id列中, 值与第1步所取值相等的那一行
* 3. 返回该行数据对应的 HasMany实例(可理解为保存多个关联模型实例的数组)
*/
public function comment() {
return $this->hasMany('App\Http\Model\Home\Comment', 'article_id', 'id');
}
示例代码:执行关联查询
// 关联模型, 一对多的使用
public function oneToMany() {
$data = Article::get();
// dd($data);
foreach ($data as $key => $value) {
echo "当前文章 <" . $value->article_name . "> 包含如下评论 <br/>";
// 关联模型 -> 关联方法名(一对多), 返回多个"被关联模型"(数组)
$comments = $value -> comment;
// dd($comments);
foreach ($comments as $key => $comment) {
// 从 被关联模型 $comment 中获取需要的数据
echo "    " . $comment -> comment . "<br/>";
}
}
}
多对多关系
多对多的关系经过拆分之后,其实就是两个一对多的关系。由于是双向一对多的关系,因此光靠2张表是无法建立关系的。需要依靠第三张表
定义多对多的关系 (A表的一条数据, 关联B表的多条数据; B条的一条数据, 也关联A表的多条数据)
BelongsToMany belongsToMany(string $related, string $table = null, string $foreignPivotKey = null, string $relatedPivotKey = null, string $parentKey = null, string $relatedKey = null, string $relation = null)
示例代码:定义关联关系
/**
* 定义多对多关联方法 $this->belongsToMany('被关联的模型related',
'多对多的关系表table', '关系表中关联字段名foreignPivotKey', '关系中被关联字段名relatedPivotKey',
'本模型中的关联字段名parentKey', '被关联模型中的关联字段名relatedKey');
* 1. 从本模型对应表Article中查找主键"parentKey"的值a;
* 2. 在关联表"table"中查找名为"foreignPivotKey"外键这列中值为a的那一行, 获取该行中名为"relatedPivotKey"外键这列对应的值b";
* 3. 到被关联模型"related"对应表Keyword中查找名为"relatedKey"这列中值为b的那一行, 返回该行数据对应的模型
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function keyword() {
return $this->belongsToMany('App\Http\Model\Home\Keyword', 'relation', 'article_id', 'keyword_id', "aid", "kid");
}
示例代码:执行关联查询
// 关联模型, 多对多的使用
public function belongsToMany() {
$data = Article::get();
foreach ($data as $key => $value) {
echo "当前文章 <" . $value->article_name . "> 包含如下关键词 <br/>";
// 关联模型 -> 关联方法名(多对多), 返回多个"被关联模型"(数组)
$keywords = $value -> keyword;
// dd($keywords);
foreach ($keywords as $key => $keyword) {
// 从 被关联模型 $keyword 中获取需要的数据
echo "    " . $keyword -> keyword . "<br/>";
}
}
}
