我想对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

10-04 22:02