laravel - 用于嵌套 jsonb 的雄辩的 Where 子句。PostgreSQL
问题描述
我的表中有一个列,如下所示:
{
1:{type: 0},
2:{type: 1}...
}
我尝试过使用 usingwhereJsonContains('table.column->type', 0)
但它不起作用,
whereRaw("table->column @> '{\"type\": 0}'::jsonb");
也不起作用,我猜是因为嵌套的 json 结构。我怎样才能使这项工作?
解决方案
在根目录下,您的 JSON 不是一个数组,而是一个对象(注意从 1 开始的索引和包含数据的括号)。你不能whereJsonContains
对物体进行表演。您应该将 JSON 根转换为数组,或者进行全面查找:
情况1:
[
{type: 0},
{type: 1}...
]
我建议这段代码:
DB::table('table')->whereJsonContains('column->type', 0)->get();
案例2
DB::table('table')
->where('column->1->type', 0)
->orWhere('column->2->type', 1)
->get();
如需进一步参考,请参阅 Laravel 文档:https ://laravel.com/docs/7.x/queries#json-where-clauses
推荐阅读
- postgresql - postgresql:dockerfile 从入口点脚本创建用户和数据库
- java - 如何比较 2 个不同的列表
? - python - Python包安装问题:终端(Anaconda Prompt)和Jupyter Notebook上的安装检查之间的差异
- google-chrome-extension - 如何动态更改 chrome 扩展的图标?
- android - 我如何从 Fragment 调用 FragmentManager?科特林
- c++ - 为什么没有创建向量向量中的对象
- java - 线程安全的唯一编号生成器
- php - 从路径中删除公共后纠正 Vue
- java - 使用 For 循环在其中一个 arrayLists 中查找和显示特定元素
- reverse-engineering - 我不知道它是如何工作的导入表