【发布时间】:2018-01-14 02:26:04
【问题描述】:
如果没有为对象本身设置,我有一个可以从父级继承的关系。
举个例子,假设我们有一个有场地的活动。
class Event extends Model
{
public function venue()
{
return $this->belongsTo('App\Venue');
}
public function activities()
{
return $this->hasMany('App\Activity');
}
}
活动中的一些活动大多发生在同一地点,但有时可能在其他地方,但仍属于同一活动。
class Activity extends Model
{
public function event()
{
return $this->belongsTo('App\Event');
}
public function venue()
{
if ($this->venue_id)
return $this->belongsTo('App\Venue');
return $this->event->venue();
}
}
如果我只是请求活动的活动并与他们合作,那很好。但是,如果我尝试为活动加载场地,我只会得到直接设置在活动上的场地,从不向父母请求。
$activities = $event->activities;
$activities->load('venue'); // Works correctly without this line
foreach ($activities as $activity)
if ($activity->venue) // Doesn't take venue from the parent (event)
echo $activity->venue->name; //Only shows if venue_id is set on activity
是否有机会修复这些关系以便我可以批量加载它们?
【问题讨论】:
标签: laravel eloquent eager-loading