Недавно начал изучать Laravel и наткнулся на кусок кода, который вызвал у меня головную боль и нуждался в объяснении, почему это так.
А именно, я установил базовое приложение laravel, в моей модели User
(класс стандартной модели) я создал метод как таковой:
public function projects() {
return $this->hasMany(Project::class, 'project_owner_id');
}
Достаточно просто, у меня есть модель Project
, у нее есть собственная таблица, в которой есть столбец и внешний ключ project_owner_id
, и я просто ссылаюсь на отношения между двумя моделями.
Теперь в моем контроллере, когда я пытаюсь получить доступ к этому методу и получить все проекты, принадлежащие вошедшему в систему пользователю, я получаю сообщение об ошибке:
$projects = auth()->user()->projects();
Мне потребовалось некоторое время, чтобы понять, что ошибка была вызвана мной при вызове projects
как функции, а не свойства, после того как я реорганизовал код как таковой:
$projects = auth()->user()->projects;
все было хорошо и работало правильно, я получал проекты, которые принадлежали авторизованному пользователю.
Мои вопросы: может ли кто-нибудь объяснить, почему это так, почему это не сработало, когда я попытался вызвать метод projects
как функцию?
auth()->user()->projects()
возвращает объект отношения, аauth()->user()->projects
возвращает результат отношения. Полный ответ вы найдете по ссылке выше. - person Abdurrahman   schedule 08.01.2020