Как объявить глобальные области действия для построителя запросов - PullRequest
1 голос
/ 31 января 2020

Я работал с областями раньше, но только на моделях, мне было интересно, как я могу применить область к построителю запросов.

DB::table('my_table')->[...]    -> Apply scope1
DB::table('my_table2')->[...]   -> Apply scope2

В основном, как сопоставить области на основе имен таблиц, но используя builder.

В итоге я хочу добиться: если модель X (с таблицей: demo_table ) используется с помощью Eloquent apply scope1 [пока хорошо], но когда я использую конструктор напрямую, он также будет применяться scope1

Редактировать: аналогично реализации Laravel 4 здесь

Ответы [ 2 ]

0 голосов
/ 31 января 2020
Для метода

Laravel Scope :: apply () требуется, чтобы ему была передана модель (см .: Illuminate \ Database \ Eloquent \ Scope). Конечно, вы могли бы создать нечто, имитирующее поведение Scope, но, к сожалению, Laravel не поддерживает DB напрямую с интерфейсом Scope.

0 голосов
/ 31 января 2020

май ниже Черта поможет вам. Я не уверен, что это хороший подход или нет.

use App\Http\Traits;

trait CustomQuieryBuilder{

    public $quiery = null;

    public function __construct($table_name) {
        $this->quiery = DB::table($table_name)
    }

    public function TodayCreated_at(){
        return $quiery->whereDate('created_at', now()->today());
    }

}

Или вы можете обратиться к этой статье. это поможет вам расширить функциональность построителя запросов.

Laravel - Расширение построителя запросов

...