渴望加载从多对多的关系

时间:2017-08-26 22:56:03

标签: php laravel

我与usersroles有很多关系。用户可以拥有多个角色,但我只希望with获得第一个角色。

请考虑以下代码:

User::with('roles')->get()

适用于所有角色,但我只想要第一个role

我已经在我的模型中进行了设置但不起作用:

public function role()
{
    return $this->roles()->first();
}

如何仅为第一个结果加载with

2 个答案:

答案 0 :(得分:0)

您应该可以直接在热切加载的关系上调用first,如下所示:

User::with(['roles' => function ($query) {
    $query->first();
})->get();

答案 1 :(得分:0)

first()实际执行查询并将结果作为集合返回。 Relationships must return a query builder,然后可以链接或执行,因此在关系中使用first()将无效。

<强>更新

我意识到你想在role中使用with,所以你需要创建一个关系来做到这一点。在User模型上建立新关系(您可以使用任何limit described in the docs,而不只是oldest()):

public function role()
{
    return $this->hasOne('App\Role')->oldest();
}

然后你可以使用它:

$users = User::with('role')->get();