2017-08-26 98 views
0

我对usersroles有多对多的关系。一个用户可以有多个角色,但我只想with抢先担任角色。渴望加载一对多关系

考虑下面的代码:

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

所有角色的伟大工程,但我只想要第一个role

我已经在我的模型设置这可是不行的:

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

如何加载with只有第一个结果?

+0

你的意思是什么*不工作*,你是否收到任何错误信息,你观察到了什么行为。还可以尝试将其名称更改为其他类似名称,从'public function role()'更改为'public function firstrole()'。如果你成功获得所有角色(),那么这也应该起作用。 –

回答

0

您应该能够直接调用first在这样的渴望加载关系:

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

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

UPDATE

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

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

然后你就可以在使用它:

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