Paginate相关模型

时间:2015-04-26 14:41:33

标签: php mysql laravel laravel-4 pagination

我想对2个模型进行分页:Trip hasMany PartialTrip

Trip型号:

public function PartialTrips()
{
    return $this->hasMany('PartialTrip', 'main_trip_id');
}

棘手的部分是,在包含查询信息的对象中,我希望每个PartialTrip都拥有它所拥有的Trip。所以,f.e。:查询Trip - >查询PartialTrip whereMainTripId =当前Trip的ID - >分页(5)。

这样,当我列出它们时,部分行程将不会在数组对象的末尾,但它们中的每一个都将直接在其父行程之后。

更新

我这样做(就像测试::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')在这种情况下不起作用......

1 个答案:

答案 0 :(得分:1)

这是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将嵌套在 WaitForSingleObject(hth1, INFINITE); 中。这就是为什么你在使用count($ trip)时只得到$次旅行的原因。但是你可以使用上面的代码获得partialTrips。

来源:http://laravel.com/docs/4.2/eloquent#eager-loading