创建自定义关系?

时间:2019-02-15 11:32:06

标签: mysql laravel-5 eloquent

模型user可以具有0个或多个foo,并且可以具有0个或多个bar。这是一个图:

enter image description here

有以下规则: 如果用户有任何竖线,则表示他具有带有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

0 个答案:

没有答案