我正在创建搜索引擎。它很简单。我有一个var - $产品,我用它来查询这样的建筑: 一开始我写了
$product= Product::where('active', 1)->has('details');
下一步是像这样扩展这个$查询
if (strlen($request->name) > 3) {
$product = $product->where('name', 'like', '%' .$request->name. '%');
}
我有按价格排序结果的问题(价格是详细信息表),我试过这段代码
$product = $product->with([
'details' => function($query) {
$product->orderBy('price', 'asc');
}
]);
我的结果没有正确排序。为什么呢?
答案 0 :(得分:0)
您不能通过具有雄辩关系的相关模型进行排序,因为他们会执行额外的查询以获得相关结果。
您需要加入。类似的东西:
$product = $product
->join('details', 'details.product_id', '=', 'products.id')
->select(['products.*', 'details.price'])
->orderBy('price');
我写的联接是一个有根据的猜测,你的表列/名称可能是什么,因为你的帖子无法分辨。您可能需要调整它们才能适合您。
答案 1 :(得分:0)
要根据相关模型(详细信息)对产品进行排序,您可以采用以下方法
使用sortBy()
收集方法
$products = $products->get()
->sortBy(function($product) {
return $product->details->price;
});
或使用devk所述的加入