作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想让产品有标签:phone、8th 和apple (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/
我是一名优秀的程序员,十分优秀!