首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >按关系列对元素进行排序

按关系列对元素进行排序
EN

Stack Overflow用户
提问于 2018-06-10 04:59:44
回答 2查看 67关注 0票数 0

我正在创建搜索引擎。它的工作原理非常简单。我有一个var - $product,我使用它来查询构建,如下所示:

代码语言:javascript
复制
$product= Product::where('active', 1)->has('details');

下一步是扩展这个$query,如下所示

代码语言:javascript
复制
if (strlen($request->name) > 3) {
    $product = $product->where('name', 'like', '%' .$request->name. '%');
}

我有一个问题,按价格排序结果(价格是到明细表),我尝试了这段代码

代码语言:javascript
复制
$product = $product->with([
    'details' => function($query) {
        $product->orderBy('price', 'asc');
    }
]);

我的结果排序不正确。为什么?

EN

回答 2

Stack Overflow用户

发布于 2018-06-10 05:42:17

您不能按具有雄辩关系的相关模型排序,因为它们会执行额外的查询以获得相关结果。

为此,您需要一个连接。类似于:

代码语言:javascript
复制
$product = $product
    ->join('details', 'details.product_id', '=', 'products.id')
    ->select(['products.*', 'details.price'])
    ->orderBy('price');

我写的连接是对你的表列/名称的一个有根据的猜测,因为不可能从你的帖子中分辨出来。您可能需要调整它们以使其适合您。

票数 0
EN

Stack Overflow用户

发布于 2018-06-10 05:44:54

要根据相关模型(详细信息)对产品进行排序,可以使用以下方法

使用sortBy()收集方法

代码语言:javascript
复制
$products = $products->get()
                     ->sortBy(function($product) { 
                            return $product->details->price;
                      });

或者使用devk声明的join。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50778488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档