这似乎非常简单,但不起作用:
// Reservations
class Reservation extends Model
{
public function service()
{
return $this->belongsTo('App\Landing');
}
}
// Service
class Landing extends Model
{
public function reservation()
{
return $this->hasMany('App\Reservation');
}
}
然后在我的控制器中,我有:
$x = Reservation::with('service')->get();
$y = Reservation::all()->load('service');
这些都不起作用。我尝试了几种加载方式,但没有一种有效。它始终为服务返回空结果。
除了te BelongsTo以外,其他任何结果都可以很好地加载(甚至嵌套),也可以。
答案 0 :(得分:1)
热切的加载工作。 问题是你的关系
在定义BelongsTo关系时,如果属性名称与所引用的实体不对应,则需要指定外键
例如:如果您将关系称为“ landing ”,就可以了,因为在后台,Laravel根据属性名称传递外键Landing_id
class Reservation extends Model
{ //landing correspond to the lowercase (singular) name of the Landing class
//in that case Laravel knows how to set the relationship by assuming
//that you want to match landing_id to the id of the landings table
public function landing()
{
return $this->belongsTo(Landing::class);
}
}
如果您选择了不同的关系名称,例如“ service ”,则需要指定外键ex:landing_id,因为service和Landing是两个不同的词,而landing对应于实际类Landing的小写版本。否则,Laravel会认为您的外键是“ service_id ”,而不是landing_id
class Reservation extends Model
{
//service is a custom name to refer to landing
//in that case Laravel needs you to specify the foreign key
public function service()
{
return $this->belongsTo(Landing::class, 'landing_id');
}
}
在此处了解更多信息:https://laravel.com/docs/5.8/eloquent-relationships#updating-belongs-to-relationships