阅读(1068)
赞(11)
Laravel 8 一对一
2021-07-07 11:41:17 更新
一对一是最基本的关联关系。例如,一个 User
模型可能关联一个 Phone
模型。为了定义这个关联,我们要在 User
模型中写一个 phone
方法。 在 phone
方法内部调用 hasOne
方法并返回其结果:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 获取与用户相关的电话记录
*/
public function phone()
{
return $this->hasOne('App\Models\Phone');
}
}
hasOne
方法的第一个参数是关联模型的类名。一旦定义了模型关联,我们就可以使用 Eloquent 的动态属性获得相关的记录。动态属性允许你访问关联方法就像访问模型中定义的属性一样:
$phone = User::find(1)->phone;
Eloquent 会基于模型名决定外键名称。在这种情况下,会自动假设 Phone
模型有一个 user_id
外键。如果你想覆盖这个约定,可以传递第二个参数给 hasOne
方法:
return $this->hasOne('App\Models\Phone', 'foreign_key');
另外,Eloquent 假设外键的值是与父级 id
(或自定义 $primaryKey
)列的值相匹配的。换句话说,Eloquent 将会通过 Phone
记录的 user_id
列中查找与用户表的 id
列相匹配的值。如果您希望该关联使用 id
以外的自定义键名,就可以给 hasOne
方法传递第三个参数:
return $this->hasOne('App\Models\Phone', 'foreign_key', 'local_key');