У меня есть следующие маршруты:
Route::apiResource('payments', 'PaymentController', ['except' => ['store', 'destroy']]);
Route::get('users/{user}/payments', [
'as' => 'users.payments',
'uses' => 'PaymentController@index',
]);
И этот контроллер:
class PaymentController
{
public function index(Request $request, User $user)
{
// Initialize query builder
$query = Payment::query();
// If a user was provided, return all payments belonging to that user
// if condition is satisfied
if ($user) {
if (condition) {
$query = $customer->payments();
} else {
// Some code that causes no results
$query->whereNull('id'); // <----- This hits the database
}
}
return PaymentResource::collection($query->paginate(10));
}
}
Если вы нажмете /payments
, он должен вернуть все платежи, сделанные всеми пользователями.
Если вы нажмете /users/id/payments
, он должен вернуть все платежи, сделанные пользователем, только если condition
имеет значение true, в противном случае он должен вернуть пустой список.
Этот код работает, однако $query->whereNull('id');
- это обходной путь который действительно попадает в базу данных.
Есть ли способ избежать попадания в базу данных и при этом вернуть пустой список?
Заранее спасибо