如何解决Laravel-在现有构建器对象上将Union与WhereExists一起使用?
我有一个查询$trips
,它是我的行程表中的一个简单的where()
查询:
$trips = $trips->where("agency_id",$myAgencyId);
我想在此whereExists()
Builder对象上使用多个$trips
查询,但是Laravel返回500(无消息)。我的语法错误吗?我担心这是带有括号的。
这是我的完整查询:
$trips = $trips->whereExists(function ($query) use ($value) {
$query->fromRaw("jsonb_array_elements(pax->'adults'->'persons') as p(person)")
->whereRaw("upper(p.person->>'name') LIKE ?",[$value]);
})
->union(
$trips->whereExists(function ($query) use ($value) {
$query->fromRaw(
"jsonb_array_elements(pax->'infants'->'persons') as i(person)"
)
->whereRaw("upper(i.person->>'name') LIKE ?",[$value]);
})
)
->union(
$trips->whereExists(function ($query) use ($value) {
$query->fromRaw(
"jsonb_array_elements(pax->'children'->'persons') as c(person)"
)
->whereRaw("upper(c.person->>'name') LIKE ?",[$value]);
})
);
注意:如果我直接将$trips
替换为模型Trip
,例如:
->union(Trip::whereExists(function ($query) use ($value) { [...]
这是为什么?
解决方法
我在逻辑上走错了路。使用union()
是一个坏主意,因为每个查询中都减少了$trips
变量。我应该改用orWhereExists()
。
这解决了我的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。