Как мне получить статический доступ к этому методу?

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

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

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

non static method should not be called statically

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

(new Person())->findRecordByIdm()
u_mulder 17.09.2018 21:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

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

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

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

Почему в контроллере над моделью? Модель или репозиторий определенно кажутся подходящим местом для этого.

Devon 17.09.2018 21:48

@Devon ... У разных людей определенно будут разные мнения по этому поводу ... но если мы идем по пути Laravel, это определенно метод controller ...

Chukwuemeka Inya 17.09.2018 21:51

Другие вопросы по теме