【发布时间】:2022-01-11 06:47:14
【问题描述】:
我有一个带有 readings (JSON) 字段的 Eloquent Book 模型。它是一个12个位置的数组,每个位置对应于当年每个月每本书的阅读次数,例如:
[1, 0, 3, 2, 5, 5, 2, 1, 3, 0, 0, 2]
在我的一个控制器中,我想按月选择所有具有一个或多个读数的书籍。所以我有一个for 循环,它会在几个月内迭代。以下是我的最佳尝试,但问题是 在任何迭代中 都没有选择任何书籍,尽管示例中的书籍应该在除 2、10 和 11 之外的所有迭代中返回:
for ($i = 1; $i <= 12; $i++) {
$books = Book::whereJsonDoesntContain('readings->'. $i - 1, 0)->get();
...
};
我还尝试在 for 循环中使用 Book::whereRaw('not json_contains(readings->'.$i-1.', 0)');,但运气相同。
有什么想法吗? 提前致谢。
【问题讨论】:
-
根据documentation:“您可以使用
whereJsonContains查询JSON 数组。”由于您正在循环,您可以/应该使用普通的 where 查询,->where("readings->{$i}", '>', 0)。 -
感谢@zoispag,但您的答案不起作用,尽管它不会引发任何错误。
$books再次返回空。正如我所见,使用 JSON 的处理方式不同。