按相关表排序

时间:2014-04-22 03:04:47

标签: php laravel-4

如果我这样做,

Booking::query()->with('vehicle')

Laravel生成两个查询:

select * from `bookings` 
select * from `vehicles` where `vehicles`.`id` in (?, ?, ?, ?, ?, ?, ?, ?)

我可以告诉Laravel改为LEFT JOIN,以便我可以在orderByvehicles.name吗?每个预订只有一辆车,所以它不会产生任何额外的记录。

我知道我可以改为DB::table('booking')->leftJoin,但它并没有填充我的模型。

1 个答案:

答案 0 :(得分:1)

你可以做两件事。首先是将您的查询更改为:

Booking::leftJoin('vehicle', 'vehicle.booking_id', '=', 'booking.id')->get(); // or whatever your fields are

另一种是在获得结果后对集合进行排序。文档中有一个很好的例子。请在此处查看:http://laravel.com/docs/eloquent#collections 希望有所帮助