【发布时间】:2021-01-12 13:33:18
【问题描述】:
我正在尝试使用这个雄辩的查询来查询我的数据库中的表,其中包含一组值,
FlightRequest::where('public', 1)
->where(function ($q) use ($query) {
$q->whereIn('departure', $query);
$q->orWhereIn('arrival', $query);
})
->whereNull('acceptee_id')
->orderBy('id', 'asc')
->get();
我的 query 变量是我的 FlightRequest 表中的 2 个值 ['EGLL', 'EGKK'] 的数组不会被退回。
我在查询中尝试了dd,它返回了这个 SQL 语句
select * from `flight_requests` where `public` = 1 and (`departure` in ('EGLL', 'EGKK') or `arrival` in ('EGLL', 'EGKK')) and `acceptee_id` is null order by `id` asc
这个语句应该有效,但我不知道如何更正它以返回我想要的。
更新
我认为问题现在归结为出发和到达列是转换为数组的 JSON 列。我需要使用出发和到达 JSON 数组中的每个元素查询我的 $query 数组中的每个元素。
我试过了
$q->orWhereJsonContains('departure', $query);
$q->orWhereJsonContains('arrival', $query);
但这仅返回到达列为['EGLL', 'EGKK'] 的行,即两个数组相同的行
【问题讨论】:
-
你可以在最后使用
dd方法而不是get来查看生成的SQL 然后你可以直接运行那个SQL 查询,这样你就可以看到哪里出了问题。并根据需要进行修改。 -
@CanVural 应该提到查询是作为 API 的一部分的请求的结果,因此
dd方法不起作用 -
没关系。
dd不是我建议的解决方案。只是为了查看生成的 SQL 并尝试调试有什么问题。因为目前看起来生成的 SQL 类似于"select * from "flight_requests" where "public" = 1 and ("departure" in ('EGLL', 'EGKK') or "arrival" in ('EGLL', 'EGKK')) and "acceptee_id" is null order by "id" asc"并且看起来很好。模型上是否有任何本地或全局范围? -
@CanVural,不,我在模型上没有任何作用域,我知道
dd不是解决方案,但我的问题是我实际上无法使用dd看到生成的 SQL -
@CanVural 我已经用生成的 SQL 语句更新了原始帖子,我无法弄清楚它有什么问题