#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())