Запустите дополнительное предложение where в модели

#laravel

Вопрос:

Можно ли указать предложение where для модели, которое будет выполняться при каждом выборе?
Пример:
У меня есть запрос $var = TestModal::where('date', '2021-06-08')->get(); , и я хочу TestModal , чтобы он выполнялся ->where('type', 'r') для каждого запроса, чтобы мне не приходилось писать его несколько раз

Комментарии:

1. это то, что область запроса предназначена для be:laravel.com/docs/8.x/eloquent#writing-global-scopes


Ответ №1:


Вы можете использовать Анонимную глобальную область для определения запроса для каждого запроса, выполняемого в модели

 <?php

namespace AppModels;

use IlluminateDatabaseEloquentBuilder;
use IlluminateDatabaseEloquentModel;

class TestModal extends Model
{
    /**
     * The "booted" method of the model.
     *
     * @return void
     */
    protected static function booted()
    {
        static::addGlobalScope('type', function (Builder $builder) {
            $builder->where('type', 'r');
        });
    }    
}
 

Ответ №2:

да, вы можете использовать несколько таких мест, как это

     var = TestModal->where(['date' => '2021-06-08', 'type' => '' ])->get();
    
or
    
    var = TestModal->where('date' , '2021-06-08' )->where('type' , '')->get();

or can your addGlobalScope

 protected static function booted()
    {
        static::addGlobalScope('table_name', function (Builder $builder) {
            $builder->where('type', ');
        });
    }