mysql - 创建自定义关系?
问题描述
模型user
可能有 0 个或多个foo
,也可能有 0 个或多个bar
。这是一个图表:
有以下规则:如果用户有任何 bar,那么这意味着他有 foo id=1
。如果没有 bar,用户可能没有 foo id=1
。foo_user
为了防止数据库不一致,永远不会在with中插入一行foo_id = 1
,因为它已经被表暗示了bar_user
。
在 Laravel 中,我可以foo
从这样的用户那里得到 all :
public foos()
{
$this->belongsToMany('App\Foo');
}
问题是由于上述规则,foo
withid = 1
可能会丢失。有没有一种简单的方法来自定义我的关系方法foos
,以便它检查,如果bar_user
存在,然后添加foo
with id=1
?我想通过一个查询和关系获得正确的 foo,所以我可以像这样使用它\App\User::whereHas('foos', ...)
这是我尝试过的
获取 all 的查询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
inbelongsToMany
而不是一个leftjoin
.
解决方案
推荐阅读
- javascript - Botium Botkit 4.0:指定用户 ID
- windows-kernel - 驱动框架的等效函数 GetPackageFamilyName() 函数
- swift - Swift - 自动更新文本字段
- python - 如何实现和调用另一个函数作为可选参数的函数(过滤函数)
- kubernetes - Kubernetes externalName 服务在仪表板上保持挂起
- quicken - 如何在 Mac 上解析 Quicken (2020) 的“QFX”导出文件
- java - Hibernate SQL findin最常出现的数字?
- r - 将条形面板放在绘图的相对两侧
- c - 如何在 C 中定义非常大的二维数组(如 1000*1000)
- python - 如何让散景图上的颜色与其正确值(对数刻度)对齐?