Laravel Как передать параметр методу Accessor в модели через условие where при построении запроса? - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть метод Accessor в Collection Model getSizesAttribute, который возвращает массив доступных размеров, например: ['S', 'L'], Теперь мне нужно получить Модели с размером 'S'. как:

$collections = $collections->where('sizes','S');

Но размеры - это массив, могу ли я так или иначе манипулировать этим, чтобы проверять возвраты, только если размеры имеют определенный размер.

Я попытался создать другой метод getIsSizeAttribute, например:

public function getIsSizeAttribute($size){
      return in_array($size,$this->sizes);
}

Теперь, как я могу использовать это в состоянии Где, как

$collections = $collections->where('is_size','S');

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Мутаторы и Аксессоры запускаются на всю глубину только после того, как запрос уже выполнен. Вы можете использовать Collection :: filter () , как предлагает Bangnokia, но это не даст вам никакого выигрыша в производительности от фактического применения условия к начальному запросу.

Я думаю, что вы ищете здесь Область запросов . Добавьте что-то вроде этого в свой класс Model:

public function scopeSize(\Illuminate\Database\Eloquent\Builder $query, $size)
{
    return $query->whereIn('sizes', $this->sizes[$size]);
}

И получить к нему доступ так:

$collection = $model->size('S')->get();
0 голосов
/ 06 ноября 2018

Вы должны использовать filter на коллекции

$collections = $collections->filter(function($item, $index) {
    return in_array('S', $item->sizes);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...