комплекс коллекций Laravel и / или выражения - PullRequest
0 голосов
/ 13 мая 2019

Попытка использовать и / или где операторы, как если бы они были вложены в скобки. пример:

Select * from myTable
where
  (id > 78 or name is not null)
  and term_date >= NOW())

Попытка получить эти сложные инструкции, которые будут использоваться в коллекциях Laravel, следующим образом:

$query = myTableModel::where(['id', '>', 78])
    ->orWhereNotNull('name')
    ->where('term_date', '>=', date('Y-m-d'))

Но этот тип запроса будет возвращать где-то вроде

where
  (id > 78 or
  name is not null and
  term_date >= Now())

или любая другая странная комбинация вместо вместо установки вложенных скобок.

Есть ли способ решить эту проблему с помощью Коллекций laravel?

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Чтобы получить запрос, который вы пытаетесь выполнить, вы можете попробовать добавить обратный вызов в метод where и добавить ваш where / илиWhere там, например:

$query = myTableModel::where(function($query) {
    $query->where('id', '>', 78)
        ->orWhereNotNull('name');
})->where('term_date', '>=', date('Y-m-d'));

Выполнение этого в локальной модели User дает следующее при выполнении toSql (), что, как я полагаю, вам нужно.

select * from `users` where (`id` > ? or `name` is not null) and `term_date` >= ?
0 голосов
/ 14 мая 2019

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

Если вы хотите выполнить пример, который я привел, вы должны сделать что-то вроде этого

$query = mytableModel::where(function($q){
    $q->where(['id', '>', 78])
        ->orWhereNotNull('name');
    })->where('term_date', '>=', date('Y-m-d'))
    ->get();

Для более сложного примера, пожалуйста Нажмите здесь

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