这是原始 SQL 查询:
$best_price = DB::select('select id,product_id, shop_name, product_name, brand, weight_volume, min(price)
FROM (
select
p.id, p.product_id, p.shop_id, s.shop_name, pr.product_name, pr.brand, coalesce(pr.weight, pr.volume) weight_volume, p.price
from prices p
inner join (
select p1.id price_id,p1.product_id id, max(p1.created_at) maxed_date
from prices p1
where product_id= ?
group by p1.id, p1.product_id, p1.shop_id) grouped on grouped.maxed_date=p.created_at and grouped.price_id=p.id
join products pr on pr.id=p.product_id
join shop_names s on s.id=p.shop_id
group by p.id, p.product_id, p.shop_id) grouped
GROUP BY product_id,shop_name', [$request->product]);
在 DBeaver 中,我得到了 "Metro C&C"
的 min(price)
的一行结果。
但是如果我这样做 dd($best_price)
我会得到以下结果:
array:2 [▼
0 => {#158 ▼
+"id": 46
+"product_id": 69
+"shop_name": "Metro C&C"
+"product_name": "Cream"
+"brand": ""Tastyland""
+"weight_volume": 0.22
+"min(price)": 300.0
}
1 => {#160 ▼
+"id": 47
+"product_id": 69
+"shop_name": "Klopshop"
+"product_name": "Cream"
+"brand": ""Tastyland""
+"weight_volume": 0.22
+"min(price)": 300.0
}
]
如果我这样做
foreach($best_price as $best_price_id) {
return $best_price_id->shop_name;
};
我收到以下结果“Metro C&C”
。
我有以下问题:
Laravel 如何理解最低价格为 300 的结果有两种(其实这是我期望的结果),而 DBeaver 只提供一种?我应该如何更改 SQL 查询以获得 2 行结果?
为什么
foreach
只返回第一行?
最佳答案
有几件事,首先使用 Laravel 的查询构建器方法来编写查询。不是行sql。您可以从 this official document. 获取它们
返回所有值,而不是单个值。
$the_best_price = []; //initializing an empty array.
foreach($best_price as $best_price_id) {
$the_best_price[] = $best_price_id->shop_name;
};
return $the_best_price; //this will return all as an array,
当您使用return
时,它会终止执行并返回它所拥有的内容,在您的问题中,它只有一个值。首先创建一个数组,然后将其返回foreach
循环。
关于php - Laravel 5. DB::select 工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214453/