gpt4 book ai didi

php - Cakephp 3 belongsToMany 子查询搜索

转载 作者:行者123 更新时间:2023-11-30 22:06:15 25 4
gpt4 key购买 nike

我有一个 belongsToMany 标签和类别的产品表。标签和类别也属于 ToMany 产品。

我正在尝试实现一种搜索功能,该功能将包括搜索参数与标记产品、分类产品以及任何产品的标题或描述相匹配的所有产品。

这是我 Controller 中的内容:

public function index()
{
$this->paginate = [
'sortWhitelist' => [
'Products.title',
'Products.msrp',
'Products.sale_price',
],
'limit' => 48,
'order' => ['Products.title' => 'asc']
];
$products = $this->Products->find();
if ($search = $this->request->query('search')) {
$matchingCategories = $this->Products->find()->matching('Categories', function ($q) use ($search) {
return $q->where(['Categories.name LIKE' => "%$search%"]);
});
$matchingTags = $this->Products->find()->matching('Tags', function ($q) use ($search) {
return $q->where(['Tags.name LIKE' => "%$search%"]);
});
$products
->where(['Products.title LIKE' => "%$search%"])
->orWhere(['Products.description LIKE' => "%$search%"])
->orWhere(['Products.id IN' => $matchingCategories])
->orWhere(['Products.id IN' => $matchingTags]);
}

$this->set('products', $this->paginate($products));
$this->set('_serialize', ['products']);
}

您可以从某种程度上看出我在这里试图完成的事情,但显然行不通。我可以让等式的任何一部分起作用,这意味着我可以得到具有匹配类别的产品,或者具有匹配标签的产品,或者在标题或描述中具有匹配的产品,但我无法获得适合搜索的所有产品在任何这些部分。

最佳答案

看起来我所要做的就是像这样在子查询中选择 id 字段:

$matchingCategories = $this->Products->find()->select(['Products.id'])->matching('Categories', function ($q) use ($search) {
return $q->where(['Categories.name LIKE' => "%$search%"]);
});

注意:我愿意接受改进建议。

关于php - Cakephp 3 belongsToMany 子查询搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41653836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com