Laravel按相关表格排序无效

时间:2017-04-17 18:37:11

标签: laravel eloquent sql-order-by

我有这种结构。

class Product extends Model{
    public function office()
    {
        return $this->belongsTo(Office::class,'office_id');
    }
}

我想按products列出office.name订单 这是查询

$res =  \App\Product::with(['office' => function($q){
        $q->orderBy('offices.name','asc');
    }])->get();

这是输出循环

    foreach($res as $key => $val){
        print "<br />user: ".$val->id.",  office: ".$val->office->id;
    }

这是Product数据: +----+--------+ | id | name | +----+--------+ | 1 | Life | | 2 | Cars | | 3 | Health | | 4 | House | +----+--------+

这是Office中的数据 +----+----------------+ | id | name | +----+----------------+ | 1 | First office | | 2 | working office | +----+----------------+

订单依据不会影响结果。 同样的结果,顺序就像不存在一样。

由于

1 个答案:

答案 0 :(得分:1)

在您的代码中,您只需按名称“订购”办公室,这意味着如果每个产品都有许多办公室,它会按字母顺序对办公室进行排序。

要对(OrderBY())一个集合进行排序,该列必须是集合对象的一个​​属性。一种解决方案可能是加入您的模型。这样的事可能会对你有所帮助。

$res = Product::with('office')
->join('offices', 'products.office_id', '=', 'offices.id')
->select('products.*', 'offices.name')
->orderBy('office.name')
->get();