模型user
可以具有0个或多个foo
,并且可以具有0个或多个bar
。这是一个图:
有以下规则:
如果用户有任何竖线,则表示他具有带有id=1
的foo。用户可能没有id=1
的不带禁止符的foo。为防止数据库不一致,foo_user
表中未暗示在foo_id = 1
中插入bar_user
的行。
在Laravel中,我可以像这样从用户那里获得所有foo
:
public foos()
{
$this->belongsToMany('App\Foo');
}
问题是由于上述规则,带有foo
的{{1}}可能会丢失。有没有一种简便的方法可以自定义我的关系方法id = 1
,以便检查是否存在foos
,然后用bar_user
添加foo
?我想通过一个查询和相关关系来获取正确的foo,因此我可以像id=1
这是我尝试过的
获取所有\App\User::whereHas('foos', ...)
的查询是
foo
我做不到
\DB::table('foos')
->leftjoin('foo_user', 'foo.id', 'foo_user.foo_id')
->where('foo_user.user_id', '=', $this->id);
->orWhereRaw('EXISTS (select * from bar_user WHERE user_id = ?) AND foos.id = 1', [$this->id]);
因为public foos()
{
$this->belongsToMany('App\Foo')
->orWhereRaw('EXISTS (select * from bar_user WHERE user_id = ?) AND foos.id = 1', [$this->id]);
}
中有一个innerjoin
,而不是belongsToMany
。