#php #mysql #laravel #database
Вопрос:
Мой запрос работает для получения существующих транзакций между двумя датами. Однако функция whereNotIn не отфильтровывает транзакцию. Он по-прежнему выбирает транзакции, которые были либо отменены, отклонены, либо завершены. В чем, по-видимому, проблема с моим запросом? Спасибо
$associates = Associate::join('transactions', 'associate.associate_id', '=', 'transactions.associate_id') -gt;select('associate.associate_id') -gt;whereNotIn('status', ['Cancelled', 'Declined', 'Finished']) -gt;whereBetween('startdate',[$start_date, $end_date]) -gt;orWhereBetween('enddate',[$start_date, $end_date]) -gt;orWhere(function ($query) use ($request) { $start_date = new DateTime($request-gt;input('start_date')); $end_date = new DateTime($request-gt;input('end_date')); $query-gt;where('startdate','gt;=',$start_date) -gt;where('enddate','lt;=',$end_date); }) -gt;get();
Ответ №1:
вы должны определить свои «где», чтобы делать именно то, что вы хотите, для этого вы можете использовать » где » с более близким:
$associates = Associate::join('transactions', 'associate.associate_id', '=', 'transactions.associate_id') -gt;select('associate.associate_id') -gt;whereNotIn('status', ['Cancelled', 'Declined', 'Finished']) -gt;where(function ($query) use ($request, $end_date, $start_date) { $query-gt;whereBetween('startdate',[$start_date, $end_date]) -gt;orWhereBetween('enddate',[$start_date, $end_date]) -gt;orWhere(function ($query) use ($request) { $start_date = new DateTime($request-gt;input('start_date')); $end_date = new DateTime($request-gt;input('end_date')); $query-gt;where('startdate','gt;=',$start_date) -gt;where('enddate','lt;=',$end_date); }); });
Комментарии:
1. Спасибо вам за ваш совет. И спасибо вам за этот ответ, он сработал, что решило мою проблему! :))