按关系列

时间:2018-06-09 20:59:44

标签: php laravel relationship

我正在创建搜索引擎。它很简单。我有一个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');
    }
]);

我的结果没有正确排序。为什么呢?

2 个答案:

答案 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所述的加入