json - 使用查询构建器和 json 数据在 laravel 急切加载上使用 whereRaw 条件
问题描述
我想做的事:
获取 IntegrationProductMatches 模型。
“9+”字在 pAttributeList(jsonb) 或 pCityList(jsonb) 列中传递。
或者
单词“+9”出现在与之关联的 integration_product 表 (productCode(string)) 中。
或者
单词“+9”出现在与之关联的 integration_category 表 (pParentCategories(jsonb)) 中。
数据示例:
产品匹配表:
+---+------------+-----------------+--------------------------------------------+----------------------------+
|id | product id | category id | pAttributeList | pCityList |
+---+------------+-----------------+--------------------------------------------+----------------------------+
| 1 | 16 | 7 |{"104187":"Yenido\u011fan","104290":"30 kg"}|{"4":"Adana"} |
| 2 | 17 | 7 |{"104187":"Yenido\u011fan","104290":"30 kg"}|NULL |
| 3 | 18 | 14 |{"104187":"+9 Ya\u015f","104211":"11 kg"} |NULL |
+---+------------+-----------------+--------------------------------------------+----------------------------+
产品表:
productCode 列类型为字符串
类别表:
+---+------------------------------------------------------------------------------------+
|id | pParentCategories |
+---+------------+-----------------+------------------------------------------------------
| 7 |["Anne ve Bebek","Bebek Arabas\u0131 Pusetleri","3 Tekerlekli Bebek Arabalar\u0131"]|
我的查询:
$pairings = IntegrationProductMatches::where(function ($query) use ($columns, $search) {
foreach ($columns as $i => $column) {
if ($i === 0) {
$query->whereJsonContains($column, $search);
continue;
}
$query->orWhereJsonContains($column, $search);
}
})
->orWhereHas("product", function ($query) use ($search) {
$query->where("productCode", "LIKE", "'%" . $search . "%'");
})
->orWhereHas("category", function ($query) use ($search) {
$query->whereRaw('JSON_SEARCH(pParentCategories, "one", \'"%' . $search . '%"\')');
})
->get()
->all();
关系:
public function product(): \Illuminate\Database\Eloquent\Relations\BelongsTo
{
return $this->belongsTo(IntegrationProduct::class, 'productID');
}
public function category(): \Illuminate\Database\Eloquent\Relations\BelongsTo
{
return $this->belongsTo(IntegrationCategory::class, 'categoryID');
}
我想在一个句子中获取选定单词的数据。
解决方案
推荐阅读
- php - 如果是用户第一次购买,如何进行固定折扣
- python - 如何调整文本大小以完全适合 WxPython 中的网格单元格?我在获取属性时遇到问题
- spring-boot - 在 hello world 应用程序中使用 docker CMD 而不是 application.properties
- ethereum - Chainlink Commidities [Gold, Silver, Oil] 测试网智能合约的价格反馈
- javascript - 如何在 JavaScript 中格式化时间戳
- mysql - 具有多个 AND 语句的 MySQL 查询
- docker - 带有通配符的 Dockerfile COPY 在 GitLab 管道中失败。“没有指定源文件”
- arrays - 如何通过“镜像效应”按照另一个表的顺序对表进行排序?
- php - 在颤振中从 PHP REST API 获取数据给出异常
- mongodb - mongoose - 如何从连接对象启动事务会话?总是抛出“没有交易开始”