В чем смысл передачи данных таким образом?

use Corp\Portfolio;

class PortfoliosRepository extends Repository {
	
	public function __construct(Portfolio $portfolio) {
		$this->model = $portfolio;
	}

если можно просто $this->model=Portfolio::all();

В предварительной обработке в другом файле?(т.е заготовка для себя методов?)
  • Вопрос задан
  • 495 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
я про то что данные передаются через конструктор . Ведь можно просто в самом коде их определить того же файла
В конструктор в данном случае передаются на данные, а объект, который будет строить запросы. Это же класс репозитория - он инкапсулирует запросы к БД, но пользуется при этом моделями Eloquent.

class PortfoliosRepository extends Repository {
  public function __construct(Portfolio $portfolio) {
    $this->model = $portfolio;
  }

  // Этот метод, скорее всего, есть в базовом классе
  public function find(int $id): ?Portfolio
  {
    return $this->model->find($id);
  }

  // А это пример инкапсуляции сложной логики
  public function featured(): Collection
  {
    return $this->model
      ->with(['some', 'relations'])
      ->where('field', 'value')
      ->orWhere('other_field', 'value')
      ->orderBy('created_at')
      ->limit(42)
      ->get()
      ->each
      ->append('mutated_attribute');
  }
}


Используется этот класс так:
$repository = new PortfoliosRepository(
  new Portfolio // <- не какое-то существующее портфолио из БД, а "пустой" объект
);

$repository->featured();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dimsog
@dimsog
Переносил код с PHP 4 на 7.4...
Использовать public property хорошо только для какого-нибудь DTO, в остальных случаях это приведет к краху. Лучше использовать для этого передачу данных в конструкторе или сеттеры.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект