【问题标题】:How to order Laravel query builder based on first condition result如何根据第一个条件结果订购 Laravel 查询构建器
【发布时间】:2017-12-10 09:38:50
【问题描述】:

我有一个公司比较网络应用程序,它允许用户在不同的选择下拉列表中选择 2 家公司并并排比较它们。到目前为止,除了订购外,一切都运行良好。我希望比较的结果基于首先查询的项目,而不是默认的 Laravel created_by 字段。下面是我的查询生成器代码:

public function compareCompanies(Request $request) {
    if ($request->has('companies') && $request->companies != null ) {
        $companies = array_filter($request->companies);

        $brands = Brand::with('categories')
        ->whereIn('brands.slug', $companies)
        ->get();
        return response()->json(['success' => true, 'brands' => $brands]);        
    }
}

下面是我的 ajax 用于显示 POST 请求的响应

$.ajax({
        type: "POST",
        url : url,
        data: $("#compareForm").serialize(),
        dataType : 'json',
        success : function(response) {

            if(response.success)
            {
                $("div#divLoading").removeClass('show');
                $.each(response.brands, function(i, brand){
                    var NewRow = '';
                    NewRow += '<table class="table"><thead><tr>';
                    NewRow += '<th>' + brand.brand + '</th>';
                    NewRow += '</tr></thead><tbody>';
                    NewRow += '<tr><td>'+brand.growth_score+'</td></tr>';
                    NewRow += '<tr><td>'+brand.mind_share +'</td></tr>';
                    NewRow += '<tr><td>'+brand.headquarters+'</td></tr>';
                    NewRow += '<tr><td>'+brand.revenue+'</td></tr>';
                    NewRow += '<tr><td>'+brand.no_of_employees+'</td></tr>';
                    NewRow += '</tbody></table></div>';
                    $("#companies").append(NewRow);
                })
            }
        },
        error: function (data) {
            console.log('An error occurred.');
            console.log(data);
        }
    });

我得到的结果如下图所示:

正如你所见,结果是交换的,因为 Laravel 使用 created_at 的值进行排序。如何根据输入的顺序对结果进行排序?

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    Eloquent 允许您在使用 orderBy 方法时通过指定列来对查询结果进行排序,如下所示:

     $brands = Brand::with('categories')
        ->whereIn('brands.slug', $companies)
        ->orderBy('column_name')
        ->get();
    

    因此,如果您在请求中提交列名,则可以动态更改数据应按哪一列排序:

     $brands = Brand::with('categories')
        ->whereIn('brands.slug', $companies)
        ->orderBy($request->column_name)
        ->get();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2015-03-16
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多