Ларавель где или где

#php #mysql #laravel

Вопрос:

У меня есть эта функция:

 public function indexo2returneditems(Request $request)  {  $per_page = $request-gt;per_page;  $sortBy = $request-gt;sort_by;  $orderBy = $request-gt;order_by;  $dateFrom = $request-gt;dateFrom;  $dateTo = $request-gt;dateTo;   return response()-gt;json([  'ok1' =gt; O2order::where([['result', '=', 'Failed'], ['status', '=', 'Failed']])  -gt;whereDate('finisheddate', 'lt;=', $dateTo)  -gt;whereDate('finisheddate', 'gt;=', $dateFrom)  -gt;paginate($per_page),  'ok2' =gt; O2order::where('deviceexchangedto', 'lt;gt;', '')  -gt;whereDate('finisheddate', 'lt;=', $dateTo)  -gt;whereDate('finisheddate', 'gt;=', $dateFrom)  -gt;paginate($per_page),  'not_ok' =gt; O2order::where('result', '=', 'Failed')  -gt;where('status', '=', 'Failed')  -gt;orWhere('deviceexchangedto', 'lt;gt;', '')  -gt;whereDate('datecreated', 'lt;=', $dateTo)  -gt;whereDate('datecreated', 'gt;=', $dateFrom)  -gt;paginate($per_page),  ], 200); }  

Ok1 и Ok2 работают нормально, но когда я соединяю их вместе, это не работает

Что я делаю не так, что я могу сделать?

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

1. Вы имеете в виду not_ok сломанную версию?

2. Что вы имеете в виду, когда объединяете их вместе?

3. its not working Вы имеете в виду ошибку или пустой результат? Где вы присоединились к ним? Можете ли вы поместить свой код, который не работает, и результат?

4. Это только примеры, ok1 и ok2 работают нормально. Его единственный API для vue. Когда я меняю дату, laravel отправляет мне правильные значения. Только этот not_ok посылает мне неправильные значения, а не ошибку. Но, например, когда я выбираю только один день в vue, правильными значениями являются только 3 записи, но laravel отправляет мне 200.

5. @Dusan, Если вы просто хотите объединить результат ok1 , а ok2 затем скорее использовать $ok1-gt;union($ok2)

Ответ №1:

вам нужно использовать функцию where в этом

попробуйте это

 $not_ok = O2order::where(function($query){  $query-gt;where([['result', '=', 'Failed'], ['status', '=', 'Failed']])  -gt;orWhere('deviceexchangedto', 'lt;gt;', '');  })  -gt;whereDate('datecreated', 'lt;=', $dateTo)  -gt;whereDate('datecreated', 'gt;=', $dateFrom)  -gt;paginate($per_page);  

потому что когда вы используете orWhere, это просто помещается или в ваш запрос, поэтому ваш запрос стал чем-то вроде этого

 select * form table1 where a = 'condition 1' and b = '2' or b = '3' and date1 = date(now())  

в то время как то, что вы хотите, это

 select * form table1 where a = 'condition 1' and (b = '2' or b = '3') and date1 = date(now())