gpt4 book ai didi

php - Laravel 5.6 根据子项过滤父行

转载 作者:行者123 更新时间:2023-11-29 05:55:03 25 4
gpt4 key购买 nike

我的数据库结构如下所示(我使用的是 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();

但是当运行此代码时,Eloquent 仅过滤在每个产品中找到的属性,并且即使没有属性与我的位置匹配,仍然会找到所有产品。当我想显示我的所有属性时,也 Eloquent 地过滤了我产品中的属性。

我目前的结果是这样的:

{
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"
}
]
}
}

是否可以仅根据子对象(属性)过滤父类并仍然获得与产品关联的所有属性?

最佳答案

我猜你需要 whereHas 来检查子集合

$product = Product::with('properties')
->whereHas('properties', function ($query) {
$query->where('name', '=', 'testproperty');
})->where('id', $id)->first();

关于php - Laravel 5.6 根据子项过滤父行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50251198/

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