Добавить строку в Eloquent Collection по умолчанию на основе необработанного запроса

StackOverflow https://stackoverflow.com//questions/25010933

  •  20-12-2019
  •  | 
  •  

Вопрос

В свои коллекции 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 */;
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top