【问题标题】:Paginate related models分页相关模型
【发布时间】:2015-07-04 22:05:48
【问题描述】:

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

Trip 模型:

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

棘手的部分是,在包含查询信息的对象中,我希望每个PartialTrip 都在拥有它的Trip 下。所以,例如:查询Trip -> 查询PartialTrip 和whereMainTripId = 当前Trip 的id -> paginate(5)。

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

更新

我正在这样做(只是为了测试::with('PartialTrips') 是否有效:

            $trips = Trip::with('PartialTrips')
                ->select('id', 'driver_user_id', 'route_from', 'route_to', 'start_date')
                ->get();
            var_dump(count($trips));

它只返回我拥有的Trips 的数量(我计算了我在数据库中有多少trips 和partial trips)。

->toSql() 在该查询上产生以下结果:

"select 'id', 'driver_user_id', 'route_from', 'route_to', 'start_date' from 'trips'"

所以我猜::with('PartialTrips') 在这种情况下实际上不起作用...

【问题讨论】:

  • 您已经在Trip model 中完成了Trip 和PartialTrip 之间的关系,对吧?
  • Eager load 可能会有所帮助,$trips = Trip::with('partialTrips')->paginate(5);
  • @mininoz ,我更新了我的帖子。请你看看好吗?

标签: php mysql laravel laravel-4 pagination


【解决方案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 变量传递给您的视图来获取所有trips 和partial 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

【讨论】:

  • 我已经做到了,但是在 PartialTrip 模型中使用 belongsTo 方法...我猜那是错误的地方...:D
  • 对不起,我忘了告诉你在哪里放置代码。你需要把它放在Trip model。你觉得它有效吗?
  • 不,它不会产生来自 PartialTrip 实体的数据... :(
  • 您能否用循环$trips 的视图更新您的问题?
  • 我更新了我的答案。注意:我将function PartialTrip() 更改为function PartialTrips()。
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 2011-07-21
  • 2019-09-16
  • 2011-04-17
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
相关资源
最近更新 更多