【发布时间】:2020-04-17 19:29:15
【问题描述】:
我有一个雄辩的查询,但没有得到预期的结果,我希望有人可以向我解释编写查询的正确方法。
我有三张桌子:
records (belongsToMany users)
users (belongsToMany records)
record_user (pivot)
record_user 表还有一个用于role 的列。
我尝试获取用户拥有role 或singer 或songwriter 的所有记录:
$results = User::find(Auth::user()->id)
->records()
->wherePivot('role', 'singer')
->orWherePivot('role', 'songwriter')
->get();
下面是 SQL 语法的生成方式:
select `records`.*, `record_user`.`user_id` as `pivot_user_id`,
`record_user`.`record_id` as `pivot_record_id` from `records`
inner join `record_user` on `records`.`id` = `record_user`.`property_id`
where
`record_user`.`user_id` = '1' and `record_user`.`role` = 'singer' or
`record_user`.`role` = 'songwriter'
singer 角色的结果符合预期:用户为歌手的所有记录。问题是songwriter 的结果:我得到了所有的词曲作者,并且查询不受user_id 的限制。出于某种原因,我期望songwriter 角色也受到user_id 的约束 - 使用雄辩的语法编写这个的正确方法是什么?
【问题讨论】:
-
那么你到底想要得到什么?用户是词曲作者或歌手的所有记录?