Eloquent: 关联关系
简介
数据库表通常相互关联。例如,一篇博客文章可能有多个评论,或者一个订单可能与下订单的用户相关。Eloquent 使管理和处理这些关联关系变得容易,并支持多种常见关联关系:
定义关联关系
Eloquent 关联关系定义为 Eloquent 模型类上的方法。由于关联关系也充当强大的查询构建器,将关联关系定义为方法提供了强大的方法链和查询能力。例如,我们可以在这个 posts 关联关系上链式调用额外的查询约束:
php
$user->posts()->where('active', 1)->get();但是,在深入了解使用关联关系之前,让我们先学习如何定义 Eloquent 支持的每种类型的关联关系。
一对一 / Has One
一对一关系是一种非常基本的数据库关系类型。例如,一个 User 模型可能与一个 Phone 模型相关联。要定义这种关系,我们将在 User 模型上放置一个 phone 方法。phone 方法应该调用 hasOne 方法并返回其结果。hasOne 方法通过模型的 Illuminate\Database\Eloquent\Model 基类对你的模型可用:
php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class User extends Model
{
/**
* 获取与用户关联的电话。
*/
public function phone(): HasOne
{
return $this->hasOne(Phone::class);
}
}传递给 hasOne 方法的第一个参数是相关模型类的名称。一旦定义了关联关系,我们可以使用 Eloquent 的动态属性检索相关记录。动态属性允许你像访问模型上定义的属性一样访问关联关系方法: