模型关联原创
# 一对一
点击查看
定义关联
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 获取与用户相关的电话记录
*/
public function phone()
{
return $this->hasOne(Phone::class);
return $this->hasOne(Phone::class, 'foreign_key'); // 会自动假定 Phone 模型有一个 user_id 的外键。如果你想重写这个约定,可以传递第二个参数给 hasOne 方法:
return $this->hasOne(Phone::class, 'foreign_key', 'local_key'); // Eloquent 将会通过 Phone 记录的 user_id 列中查找与用户表的 id 列相匹配的值。如果你希望使用自定义的主键值,而不是使用 id 或者模型中的 $primaryKey 属性,你可以给 hasOne 方法传递第三个参数:
}
}
定义反向关联
点击查看
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Phone extends Model
{
/**
* 获取拥有此电话的用户
*/
public function user()
{
return $this->belongsTo(User::class); // 一般不用传 后两个参数
return $this->belongsTo(User::class, 'foreign_key');// 如果 Phone 模型的外键不是 user_id,这时你可以给 belongsTo 方法的第二个参数传递一个自定义键名
return $this->belongsTo(User::class, 'foreign_key', 'owner_key');//第三个参数,这个参数是在父模型中自己定义的字段名称
}
}
使用
$phone = User::find(1)->phone;
# 一对多
点击查看
public function comments()
{
return $this->hasMany(Comment::class);
return $this->hasMany(Phone::class, 'foreign_key'); // 会自动假定 Phone 模型有一个 user_id 的外键。如果你想重写这个约定,可以传递第二个参数
return $this->hasMany(Phone::class, 'foreign_key', 'local_key'); // Eloquent 将会通过 Phone 记录的 user_id 列中查找与用户表的 id 列相匹配的值。如果你希望使用自定义的主键值,而不是使用 id 或者模型中的 $primaryKey 属性,你可以传递第三个参数
}
# 一对多 (反向) / 属于
点击查看
return $this->belongsTo(Post::class);
return $this->belongsTo(Post::class, 'foreign_key'); // Eloquent 将会默认 Post 模型在 comments 表中的外键是 post_id。如果不是,请在第二个参数进行修改
return $this->belongsTo(Post::class, 'foreign_key', 'owner_key'); //主表(Post 表)不使用 id 来作为它的主键的话,或者你想通过其他列来关联相关模型的话,那么可以传递一个参数来作为 belongsTo 方法的第三个参数,这个参数是主表(Post 表)中想要作为关联关系的字段的名称。
# 一对多检索
上次更新: 2022/08/23, 18:12:45