Laravel стремится загрузить отношение BelongsTo, не работает - PullRequest
0 голосов
/ 07 марта 2019

Это кажется чрезвычайно простым, и все же это не работает:

// 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 Ответ

1 голос
/ 07 марта 2019

Стремительная загрузка работает.Проблема заключается в ваших отношениях

Когда вы определяете отношение BelongsTo, вам нужно указать внешний ключ, если имя вашей собственности не соответствует сущности, на которую ссылается

Например: если вы вызываетеОтношения " посадка ", у вас все будет в порядке, потому что изнутри 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.В противном случае Laravel подумал бы, что ваш внешний ключ - « service_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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...