通过使用关系数据,Laravel Eloquent订单

时间:2017-02-22 09:45:55

标签: laravel sql-order-by

我有以下2个表格:

var newWin ;
    function openWindow(id) {
        newWin = window.open(url,config,setting);
        var resizePopup = function () {
                newWin.resizeTo(newWin.document.getElementById("certainID").offsetWidth,100);
                newWin.focus();
            };
        var tryResize = function(){
                if(newWin.document.getElementById("certainID")==null){
                    setTimeout(function(){tryResize();},500);
                }
                else{
                    resizePopup();
                }
            }
        tryResize();
        };

我想显示按Cars ---- id | created_at and Repaired id | cars_id | updated_at desc排序的所有车辆,但也是created_at数据透视表中updated_at订购的车辆。修复可以包含许多特定Repaired的条目。

因此,如果cars_id已创建_为carA2017-02-20已创建_为carB,则已修复2016-01-10中的updated_at已于{ {1}},我想在carB之前显示2017-02-22,因为关系是"更新"。

我也不想从关系表中加载数据。

我尝试了以下内容:

carB

carA

^即使$cars = $model->load(['repaired' => function($query) { return $query->orderBy('updated_at', 'desc'); }])->orderBy('created_at', 'desc'); 字段为$model->join('repaired', 'repaired.cars_id', '=', 'cars.id') ->orderBy('repaired.updated_at', 'desc') ->orderBy('cars.created_at', 'desc') ->select('cars.*'); ,此查询也会返回“已修复”表中的所有项目。我无法对它们进行分组。

2 个答案:

答案 0 :(得分:1)

每次修复更新后,您都可以使用Eloquent中的touch parent timestamps功能更新汽车的updated_at

在修复模型中,只需添加以下行:

protected $touches = ['car'];

这假设您的关系方法当然名为car()

然后你可以这样做:

Cars::orderBy('updated_at');

每次添加或更新Repaired表格中的行时,car关系中指定的汽车的updated_at设置为同一时间。这样你可以通过它订购。

答案 1 :(得分:0)

 $popular_posts = Post::withCount('favorite_to_users')
            ->orderBy('view_count', 'desc')
            ->orderBy('favorite_to_users_count', 'desc')
            ->take(5)->get();