我的数据库结构如下(我使用的是mysql):
产品:
# ------#---------#
| id | int |
# ------#---------#
| name | varchar |
# ------#---------#
产品特性:
# -------------#-----#
| product_id | int |
# -------------#-----#
| property_id | int |
# -------------#-----#
属性:
# -------#---------#
| id | int |
# -------#---------#
| name | varchar |
# -------#---------#
| value | varchar |
# -------#---------#
是否可以根据属性过滤产品对象?目前,我正在尝试使用如下方式:
$products = Product::with(['properties' => function($query){
$query->where('name', 'testproperty');
}])
->get();
但是在运行这段代码时,elounk只对每个产品中找到的属性进行筛选,即使没有与我的where匹配的属性,仍然会找到所有产品。当我想显示我的所有属性时,还会雄辩地过滤我产品中的属性。
我目前的结果是:
{
id: 1,
name: "test",
properties: [
{
id: 1,
name: "testproperty",
value: "testvalue"
}
]
},
{
id: 2,
name: "test2",
properties: [
]
}
但我在找这样的东西:
{
id: 1,
name: "test",
properties: [
{
id: 1,
name: "testproperty",
value: "testvalue"
},
{
id: 2,
name: "testproperty2",
value: "testvalue2"
}
]
}
}
有没有可能仅仅基于子对象(属性)过滤父类,而仍然获得与产品相关联的所有属性?
1条答案
按热度按时间9lowa7mx1#
我想你需要
whereHas
检查子集合