php - Laravel whereIn 实现 whereJsonContains
问题描述
我有这段代码可以正常工作并返回 1 个项目集合:
$myCollection = MyModel::whereJsonContains('payload->ProductCode->id', "1")->get();
但是,我想获取 $myCollection 不仅是在值为 1 时,而且是在它包含在许多数组项之一中时。
$array = [0 => 1, 1 => 2, 2 => 3];
$myCollection = MyModel::whereJsonContains('payload->ProductCode->id', $array)->get();
更新 当我尝试这段代码时,它返回一个空数据。我的意思是当我使用1而不是"1"时。这可能是我使用数组时它不起作用的原因吗?
$myCollection = MyModel::whereJsonContains('payload->ProductCode->id', 1)->get();
有效载荷包含的一个示例是这样的。我想这可以更清楚地说明我的问题:
{
"ProductCode": {
"id": "1",
"name": "My Service",
}
}
运行上面的代码会返回一个空数据。请问我该如何解决?
解决方案
您需要按照以下方式进行查询。
$array = [0 => 1, 1 => 2, 2 => 3];
// Eloquent
PaymentTransaction::whereJsonContains('payload->ProductCode->id',$array)->get();;
// or
PaymentTransaction::jsonContains('payload->ProductCode->id', $array)->get();
你也可以尝试如下。
$array = [0 => 1, 1 => 2, 2 => 3];
$array = array_values(array_map('strval',$array));
PaymentTransaction::where(function ($query) use ($array) {
foreach ($array as $id) {
$query->orWhereJsonContains('payload->ProductCode->id', $id);
}
})->get();
推荐阅读
- java - 查找 MongoDB 集合中的所有文档需要很长时间
- elasticsearch - Kafka / Logstash 输出到 Elasticsearch
- git - 搞砸了推送到 github,现在想恢复更改
- php - wemos d1(作为客户端)和网络服务器(在 arduino 或 wemos d1 上)通过 LAN 进行通信
- javascript - 如何将 facebook 插件页面集成到博客中?
- regex - 如何在ansible中的两个点之间获取字符串
- python - 如何在 MAC OS 中将 python 2.7 与最新的 openssl 版本链接?
- google-sheets - 让它显示一个唯一的单元格范围,具体取决于哪个单元格为 TRUE
- python-3.x - pandas 高级逗号分割
- regex - Excel VBA - Regex.Escape 方法