gpt4 book ai didi

php - Laravel/MySQL/ Eloquent : Grouped Clauses

转载 作者:行者123 更新时间:2023-11-30 21:39:31 25 4
gpt4 key购买 nike

我的网站上有一个搜索功能,用户可以在特定范围内按汽车的不同属性进行搜索。用户可以选择也可以不选择按某个属性进行搜索。这些数组只是动态的,可以有 0、1、2 或 3 个条目,具体取决于选择的用途(因此查询必须是动态的)即:

$price_ranges = [
[0, 1000],
[1000, 2000],
[2000, 3000]
];

$weight_ranges = [
[1000, 2000],
[5000, 9999]
]

我想使用 Laravel/Eloquent 中的查询构建器为此构造一个适当的查询,但是我在对子句进行分组时遇到了很多困难。这是我的:

$query = Shipment::with(['cars']);

foreach($price_ranges as $price_range){
$query->whereHas('cars', function($q) use(&$price_range){
$q->where('price', '>=', $range[0])->where('price', '<=', $range[1]);
});
}

foreach($weight_ranges as $weight_range){
$query->whereHas('cars', function($q) use(&$weight_range){
$q->where('weight', '>=', $range[0])->where('weight', '<=', $range[1]);
});
}

$results = $query->get();

此代码的问题在于它正在查找具有满足每个 价格条件的汽车的 cargo ......但我希望它找到满足任何的 cargo > 的条件,并只返回相关的汽车。我创建了一个示意图来更好地说明我正在尝试做的事情:

enter image description here

最佳答案

我认为您只需要使用 orWhereHas 或 whereHas!但是你需要用一个 where 来包装整个权重查询

$query = Shipment::with(['cars']);

foreach($price_ranges as $price_range){
$query->orWhereHas('cars', function($q) use(&$price_range){
$q->where('price', '>=', $range[0])->where('price', '<=', $range[1]);
});
}

foreach($weight_ranges as $weight_range){
$query->where(function($q) use(..) {
$q->orWhereHas('cars', function($q) use(&$weight_range){
$q->where('weight', '>=', $range[0])->where('weight', '<=', $range[1]);
});
});
}

$results = $query->get();

我可能完全错了,很久没有这样做了。请告诉我,祝你好运。

关于php - Laravel/MySQL/ Eloquent : Grouped Clauses,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52359922/

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