Laravel渴望加载BelongsTo关系不起作用

时间:2019-03-07 04:34:45

标签: laravel laravel-5

这似乎非常简单,但不起作用:

// 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以外,其他任何结果都可以很好地加载(甚至嵌套),也可以。

1 个答案:

答案 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