Laravel — динамическая привязка не работает в отношениях «один ко многим»

#php #mysql #laravel

#php #mysql #laravel

Вопрос:

Моими моделями являются Employee, которые имеют отношение:

 public function company(){
        return $this->belongsTo('AppCompany','company');
    }
  

и компания, которая имеет отношение:

 public function employees(){
        return $this->hasMany('AppEmployee','company');
    }
  

company это FK в моей employees таблице, указывающий на id в моей companies таблице.
В tinker я выполняю следующие команды:

 $employee = AppEmployee::firstOrFail(); 
$employee->company; //returns 1 
  

Но когда я делаю

 $employee->company->name; 
  

или

 $employee->company->id;
  

Возвращает ошибку:

 PHP error:  Trying to get property of non-object on line 1
  

Комментарии:

1. Я думаю, это потому, что у вас есть вызываемый столбец company , и ваше отношение имеет точно такое же имя, столбец является свойством $employee , поэтому он возвращает 1 вместо объекта.

2. если вы dd($employee->company) , возвращает ли он массив или просто 1 ?

3. Я думаю, что это так AppEmployee::firstOrFail() . Это опечатка?

4. @AndyHolmes, только 1.

5. @Neat, сделайте это ответом?

Ответ №1:

Спасибо @Neat, причина заключалась в том, что поля были названы так же, как методы отношений. Я переименовал поле company в company_id , и теперь оно работает нормально.