gpt4 book ai didi

mysql - 如何通过多标签选择产品

转载 作者:行者123 更新时间:2023-11-30 21:53:04 27 4
gpt4 key购买 nike

我有一个像这张图片的数据示例 enter image description here

我想让产品有标签:phone8thapple (iphone 8)

当我使用 mysql 时,什么是查询?

当我使用 Laravel Eloquent ORM 时代码是什么?

抱歉我的英语不好。非常感谢!

---更新---

这是我的查询解决方案,它返回了我想要的产品 (iPhone 8),但这不是好的解决方案

SELECT * 
FROM products
WHERE id IN (
SELECT product_id
FROM maps
JOIN tags ON maps.tag_id = tags.id
WHERE tags.name = "phone"
AND product_id IN (
SELECT product_id
FROM maps
JOIN tags ON maps.tag_id = tags.id
WHERE tags.name = "8th"
AND product_id IN (
SELECT product_id
FROM maps
JOIN tags ON maps.tag_id = tags.id
WHERE tags.name = "apple"
)
)
)

最佳答案

首先,您需要在模型中添加关系。

产品型号:

public function tags()
{
return $this->belongsToMany(\App\Tag::class, 'maps', 'product_id', 'tag_id');
}

标签模型:

public function products()
{
return $this->belongsToMany(\App\Product::class, 'maps', 'tag_id', 'product_id');
}

现在,为了获得所需的产品,您可以执行以下操作:

$products = Product::whereHas('tags', function ($query) {
$query->where('name', 'phone')
->orWhere('name', '8th')
->orWhere('name', 'apple');
})
->get();

如果你有一个标签名称数组,那么你可以这样做:

$products = Product::whereHas('tags', function ($query) use ($tagNames) {
$query->whereIn('name', $tagNames);
})
->get();

关于mysql - 如何通过多标签选择产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46356580/

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