我正在创建搜索引擎。它的工作原理非常简单。我有一个var - $product,我使用它来查询构建,如下所示:
$product= Product::where('active', 1)->has('details');
下一步是扩展这个$query,如下所示
if (strlen($request->name) > 3) {
$product = $product->where('name', 'like', '%' .$request->name. '%');
}
我有一个问题,按价格排序结果(价格是到明细表),我尝试了这段代码
$product = $product->with([
'details' => function($query) {
$product->orderBy('price', 'asc');
}
]);
我的结果排序不正确。为什么?
发布于 2018-06-10 05:42:17
您不能按具有雄辩关系的相关模型排序,因为它们会执行额外的查询以获得相关结果。
为此,您需要一个连接。类似于:
$product = $product
->join('details', 'details.product_id', '=', 'products.id')
->select(['products.*', 'details.price'])
->orderBy('price');
我写的连接是对你的表列/名称的一个有根据的猜测,因为不可能从你的帖子中分辨出来。您可能需要调整它们以使其适合您。
发布于 2018-06-10 05:44:54
要根据相关模型(详细信息)对产品进行排序,可以使用以下方法
使用sortBy()
收集方法
$products = $products->get()
->sortBy(function($product) {
return $product->details->price;
});
或者使用devk声明的join。
https://stackoverflow.com/questions/50778488
复制相似问题