#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
, и теперь оно работает нормально.