2014-04-22 54 views
0

如果我这样做,排序由相关表

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

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

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

另一种是排序的集合你得到结果之后。文档中有一个很好的例子。检查它在这里:http://laravel.com/docs/eloquent#collections 希望可以帮助

+0

我不认为雄辩模型支持'leftJoin'? 'leftJoin'不在该页面的任何位置。 – mpen

+0

嗯,它支持它。只是一个建议,如果你有大量数据的表格,使用连接而不是急切和懒惰的加载是一个好主意。我最近有很多令人头疼的事情 – faust