我想对2个模型进行分页:Trip
其中hasMany
PartialTrip
。Trip
模型:
public function PartialTrips()
{
return $this->hasMany('PartialTrip', 'main_trip_id');
}
棘手的部分是,在包含查询信息的对象中,我想让每个
PartialTrip
在拥有它的Trip
下。因此,例如:查询Trip
->查询PartialTrip
,其中whereMainTripId
=当前Trip
-> paginate(5)的ID。这样,当我列出它们时,部分行程将不在数组对象的末尾,但是每个行程都将直接在其父行程之后。
更新资料
我正在这样做(只是为了测试
::with('PartialTrips')
是否有效: $trips = Trip::with('PartialTrips')
->select('id', 'driver_user_id', 'route_from', 'route_to', 'start_date')
->get();
var_dump(count($trips));
它返回给我我所拥有的
Trip
的数量(我计算了数据库中有多少行程和部分行程)。在该查询上的
->toSql()
产生以下内容:"select 'id', 'driver_user_id', 'route_from', 'route_to', 'start_date' from 'trips'"
所以我猜
::with('PartialTrips')
在这种情况下真的不起作用... 最佳答案
这是trip_id
来自的答案
请注意,Eloquent假定了该关系的外键
根据型号名称。
详细信息:http://laravel.com/docs/4.2/eloquent#one-to-one
当使用hasMany
关系without specific foreign
键时,假定模型使用trip_id
作为外键(表名+ ID)。无论如何,您都可以覆盖它。您的模型可能看起来像
//Trip model
public function PartialTrips()
{
return $this->hasMany('PartialTrip', 'main_trip_id'); // second parameter is your foreign key
}
更多详细信息:http://laravel.com/docs/4.2/eloquent#one-to-many
您可以通过将
trips
变量传递到视图并像这样渲染它们来获得所有partial trips
和$trips
@foreach ($trips as $trip)
<div> Your trip id: {{ $trip->id }}</div>
<div> -- Partial Trips </div>
@foreach ($trip->partialTrips as $partialTrip)
<div> Partial trip id: {{ $partialTrip->id }}</div>
@endforeach
@endforeach
注意:当您使用
with()
(紧急加载)时,$partialTrips
将嵌套在$trips
内。这就是为什么在使用count($ trips)时只获得$ trips数量的原因。但是您可以使用上面的代码来获取partialTrips。来源:http://laravel.com/docs/4.2/eloquent#eager-loading