То, что вы написали, будет работать, но функция Collection::contains
может быть довольно медленной, если коллекция большая.
Поскольку у вас есть идентификатор, я, вероятно, внесу следующее изменение:
$suppliers = Supplier::active()->get();
$supplier = Supplier::find($record->supplier->id);
if (!$supplier->active) {
$suppliers->add($supplier);
}
Конечно, недостатком этого является то, что вы можете делать ненужный запрос к базе данных.
Итак, вы должны учитывать:
- является ли поставщик
record
более активным или неактивным? - - это размер коллекцииактивных поставщиков, достаточно крупных, чтобы оправдать очередной (потенциально потерянный) вызов в базу данных?
Сделайте наиболее разумный выбор, основываясь на том, что вы знаете о данных вашего приложения.
Что касается второго вопроса, если вам понадобится только этот конкретный набор поставщиков в этой одной части вашего приложения, то контроллер является хорошим местом для этого кода.
Если, однако, вы будетеВам нужен этот конкретный набор поставщиков в других частях вашего приложения, вам, вероятно, следует переместить этот код в другое место. В этом случае может иметь смысл создать функцию в связанной модели (независимо от типа $record
...), которая возвращает набор поставщиков этой модели. Что-то вроде:
public function getSuppliers()
{
$suppliers = Supplier::active()->get();
$supplier = $this->supplier;
if (!$supplier->active) {
$suppliers->add($supplier);
}
return $suppliers;
}