我正在尝试构建另一种关系,它返回所有记录而不是仅返回相关记录。我试过返回一个查询构建器,但这不起作用,它必须是一个关系。我应该返回什么才能使这项工作?
public function devices()
{
if ($this->admin) {
// return all devices relationship instead
} else {
return $this->belongsToMany('Device', 'permissions');
}
}
编辑:我想在大多数情况下继续构建查询,而不仅仅是获取设备。
答案 0 :(得分:0)
模型中的devices()函数应该返回一个关系,你不应该在那里添加if语句。让你的devices()功能如下:
public function devices()
{
return $this->belongsToMany('Device', 'permissions');
}
在您的用户模型中添加新功能:
public function getDevices() {
if($this->admin === true) {
return Device::all();
}
return $this->devices();
}
现在你可以做到:
$admin->getDevices(); // will return all devices
$user->getDevices(); // will return only relations
答案 1 :(得分:0)
我实际上采用了稍微不同的方式并使用了范围:
protected function scopeHasAccess($query, User $user)
{
if ($user->admin) {
return $query;
}
return $query->join('permissions', 'permissions.device_id', "devices.id")
->where('permissions.user_id', $user->user_id);
}
答案 2 :(得分:0)