Как мне получить статический доступ к этому методу? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть модель Eloquent Person, которая имеет следующую функцию

public function findRecordByIdm($idm)
{
   $record =  Person::find($idm);
   return $record;
}

В отдельном контроллере, ProspectController, я хочу вызвать эту функцию, чтобы получить запись Person, возвращаемую $ idm. Если я сделаю это без объявления статического метода, я получу

non static method should not be called statically

Я знаю, что из-за сложности тестирования я не должен просто объявлять метод как статический. Как мне вместо этого сделать эту функцию доступной из ProspectController?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Этот вопрос определенно вызовет различные мнения, поскольку мы все предпочитаем один шаблон другому, но, следуя пути Laravel, вы должны делать это в своем контроллере, а не в своей модели.
В ProspectController.php

public function findRecordByIdm($idm)
{
   $record =  Person::find($idm);
   return $record;
}

Если вы собираетесь повторно использовать функцию в разных местах, вам следует рассмотреть возможность использования служб и репозиториев ...

0 голосов
/ 17 сентября 2018

Find - это не метод Model, а метод экземпляра в классе Builder. Из-за определения Model::__callStatic, Model::find (или любой другой несуществующий метод) передается новому экземпляру класса Builder. Это единственная причина, по которой вы можете вызвать find как статически, так и нестатически, потому что Model::find на самом деле не существует.

Вы можете использовать экземпляр модели, как предлагает u_mulder, но это один из случаев, когда я утверждаю, что статический метод - это хорошо. Это соответствует схеме, аналогичной заводской схеме, где весь этот статический метод заключается в подготовке и возврате экземпляра модели.

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