Добавить строку в Eloquent Collection по умолчанию на основе необработанного запроса
Вопрос
В свои коллекции Eloquent я хотел бы добавить дополнительный столбец под названием «редактируемый».«Редактируемый» должен быть включен в каждый запрос, который я запускаю на некоторых моделях.«Редактируемое» значение может быть истинным или ложным, в зависимости от необработанного запроса.
Итак, у меня есть запрос, который следует запускать в каждом запросе моих моделей.Добавляю в свою коллекцию еще один столбец.Значение «редактируемый» определяется необработанным запросом.
Как лучше всего это сделать?
Решение
Вы можете добавить addSelect()
метод в вашу цепочку запросов, чтобы включить настраиваемый атрибут.
Что-то вроде
$results = YourModelClass::select("*")
->addSelect(DB::raw("IF(condition,1,0) AS editable"))
->get();
В приведенном выше случае вы должны заменить condition
с соответствующим оператором SQL, который будет оцениваться для каждой строки как часть запроса.Если утверждение верно, то editable = 1
и если ложь, то editable = 0
за каждую строку, возвращенную в вашу коллекцию.
РЕДАКТИРОВАТЬ:Я только что увидел, что ты хочешь это каждый запрос, поэтому вам, вероятно, понадобится глобальная область видимости/признак для ваших моделей, но описанный выше метод включения дополнительного атрибута должен быть правильным.
Я не буду копировать/вставлять документацию по добавлению глобальных областей, она есть в основной документации Laravel, и я уверен, что вы сможете ее найти.
Другие советы
Вы можете добавить пользовательский Getter на вашу модель:
public function getEditableAttribute()
{
/* return result from your raw query here */;
}
.