2016-06-24 2 views
0

Добавляя следующий фрагмент кода в красноречивых модели я могу заставить модель включать определенные ограничения SQL на все базы данных вызовов всегда делается с помощью этого Model:Laravel/Красноречивое - положение ограничений NewQuery в запросе

public function newQuery($excludeDeleted = true) 
{ 
    // Make use of all functionalities of the "newQuery" method of the 
    // parent Eloquent class; and add constraints to that instance. 
    $sql = parent::newQuery($excludeDeleted); 

    // Example constraint 
    $sql->where('example', 'test'); 

    return $sql; 
} 

Однако при добавлении ограничений, например контроллер, эти дополнительные ограничения всегда будут добавляться ПОСЛЕ вышеопределенного ограничения WHERE `example` = 'test.

Можно ли принудительно установить определенное ограничение ПОСЛЕ всех остальных ограничений? Вместо ПЕРЕД? У меня есть необходимость соблюдать порядок существующих индексов базы данных.

+0

Вы используете Laravel 5.2? Ознакомьтесь с глобальными областями https://laravel.com/docs/5.2/eloquent#global-scopes – Jeff

ответ

1

Во-первых, вы должны использовать global scopes для реализации этой функции, а не для переопределения метода newQuery.

Во-вторых, если ваша проблема связана только с индексом, позиция столбцов в предложении where не имеет значения для выбора индекса. Порядок столбцов в определении индекса имеет значение, но не порядок в предложении where.

Смежные вопросы