>我有一个属于用户和资源的多属性关系。
用户:
public function resources() {
return $this->belongsToMany('Resource')->withPivot(array('value'));
}
资源:
public function users() {
return $this->belongsToMany('User')->withPivot(array('value'));
}
中间表resource_user
。跟:
$resources = Sentry::getUser()->resources()->get();
我获得了user_id在resource_user表中的所有资源。目前为止,一切都好。但是我怎样才能获得所有资源条目,甚至中间表中不存在user_id?假设我在资源表中有 3 个资源。ID 1、2 和 3。我有一个 ID 为 1 的用户。在中间表中,我只有 2 行:
resource_id 1 和user_id 1 和值 50。
resource_id 2 和 user_id 1 和值 100。
但是我想显示所有资源,如果用户不在那里,应该有资源对象但没有用户的关系模型。
whereHas
无法解决此问题。
所以我的目标是得到 3 个结果,而不是 2 个。像这样:
resource_id 1 user_id 1 值 50
resource_id 2 user_id 1 值 100
resource_id 3 user_id 0 值 0
我唯一想通的是:
在资源模型中,我创建了一个这样的函数:
# Get specific User value from resource
public function userValue() {
$res_user = DB::table('resource_user')->whereUserId(Sentry::getUser()->id)->whereResourceId($this->id)->first();
if($res_user){
return $res_user->value;
}else{
return 0;
}
}
但我想知道有没有一种更干净雄辩的方法?有什么想法吗?
我不确定我是否正确理解你,但要获得"所有资源",你可以使用Resource
模型:
$resources = Resource::with('users')->get();
要仅预先加载当前用户,您可以添加过滤闭包:
$resources = Resource::with(array('users' => function($q) use ($userId){
$q->where('user_id', $userId);
}))->get();