有没有办法在急切加载时为 Eloquent 关系设置别名?例如,我可能有如下查询。
User::with(['roles' => function ($query) { $query->where('type', ADMIN); }]);
但是,如果我还想急切加载状态为 ACTIVE 的角色怎么办?我能想到的唯一方法是复制 User 模型上的角色关系并给它一个不同的名称。查询将类似于以下内容。
User::with([
'roles' => function ($query) { $query->where('type', ADMIN); },
'otherRoles' => function ($query) { $query->where('status', ACTIVE) }]
);
我可以在我的用户模型上使用诸如adminRoles
和 之类的方法activeRoles
,但这真的不是我想要的,因为有很多可能的参数。
你已经表明你不想在你的用户模型上有额外的方法,但这是除了像你一样使用闭包之外的最好的方法。您可以通过使用新方法(例如adminRoles
利用现有关系方法和相关模型提供的范围)来稍微改进代码。
class User extends Eloquent
{
public function roles()
{
return $this->hasMany(Role::class);
}
public function adminRoles()
{
return $this->roles()->admin();
}
}
然后定义要在Role
模型上使用的范围。
class Role extends Eloquent
{
public function scopeAdmin($query)
{
$query->where('type', static::ADMIN);
}
}
您现在可以预先加载这些作用域关系。
User::with('adminRoles')->get();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句