Работает ли Laravel для каждой модели? - PullRequest
0 голосов
/ 13 февраля 2019

Я использую Laravel 5.7 и PHP 7.2.10.

Я хочу те записи, для которых max_age = 0 или max_age> 0, тогда он должен проверить, находится ли $age между max_age и min_age.

В CarPremium модель

public function scopeAge($query, $age)
 {
     if ( $this->max_age == 0 ) {
        return $query;
     } else {
       return $query->where('min_age', '<=', $age)->where('max_age', '>=', $age)->orWhere('max_age','=',0);
    }
}

Я получаю записи, для которых возраст не находится между max_age и min_age, и не получаю записи, для которыхmax_age = 0.

В повозке

>>> App\Models\CarPremium::query()->age(18)->get()
=> Illuminate\Database\Eloquent\Collection {#3064
     all: [
       App\Models\CarPremium {#3063
         id: 2,
         min_age: 25,
         max_age: 100,
         status: 1,
         created_at: "2018-12-10 05:34:39",
         updated_at: "2018-12-10 05:34:39",
       },
       App\Models\CarPremium {#3064
         id: 8,
         min_age: 18,
         max_age: 30,
         status: 1,
         created_at: "2018-12-10 05:34:39",
         updated_at: "2019-01-15 09:14:53",
       },
     ],
   }

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Нельзя использовать свойства модели ($this->max_age) в функции с областью действия.Запрос еще не выполнен, поэтому его невозможно сравнить с локальным значением.

Лучшим способом было бы добавить or where к вашему запросу:

public function scopeAge($query, $age)
{
    return $query
            ->where('max_age', 0)
            ->orWhere(function ($query) use ($age) {
                $query  
                    ->where('min_age', '<=', $age)
                    ->where('max_age', '>=', $age);
            });
}
0 голосов
/ 13 февраля 2019

Вы можете обновить область с помощью:

public function scopeAge($query, $age)
{

    return $query->where('max_age','=',0)
        ->orWhere(function($q) use($age){
            return $q->where('min_age', '<=', $age)->where('max_age', '>=', $age);
        });

}

Тогда вы можете сделать:

App\Models\CarPremium::age(18)->get()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...