Метод Laravel Illuminate Database Eloquent Collection :: toSql не существует.

Я хочу найти все записи из базы данных, а затем отфильтровать эти записи, но когда я хочу увидеть запрос с

dd($posts->toSql()); 

это дает мне ошибку

 "IlluminateDatabaseEloquentCollection::toSql does not exist." 

это дает мне еще одну ошибку

 "Method IlluminateDatabaseEloquentCollection::paginate does not exist." 
 $posts = Post::all(); if( !is_null($brand) ) $posts = $posts->where('brand', $brand); if( !is_null($car_type) ) $posts = $posts->where('car_type', $car_type); if( !is_null($color) ){ $posts = $posts->where('exterior_color', $color); } $posts = $posts->whereBetween('year',[$from_year,$to_year]); $posts = $posts->whereBetween('milage',[$min_milage,$max_milage]); $posts = $posts->whereBetween('price',[$min_price,$max_price]); $posts = $posts->paginate(4); dd($posts->toSql()); 

Всего 2 ответа


Во-первых, замените Post::all() на Post::query() . Вы получаете все результаты, прежде чем начать фильтрацию.

Метод paginate() выполнит запрос и загрузит результаты в Collection , что означает, что вы вызываете toSql() для коллекции вместо экземпляра построителя запросов.

Поэтому вам следует либо вызвать toSql() перед вызовом paginate() , либо, если вы хотите увидеть ограничения нумерации страниц, вы можете сделать следующее, прежде чем запускать запрос / в поставщике услуг.

 use IlluminateSupportFacadesDB; // ... DB::listen(function ($query) { var_dump($query->sql); }); 

Ларавелла: 5

Вы не можете ->paginate() или ->toSql() после Post::all() / Post::get()

Что тебе необходимо сделать :

Используйте ниже:

 $posts = Post::query(); if( !is_null($brand) ) $posts = $posts->where('brand', $brand); $posts = $posts->whereBetween('year',[$from_year,$to_year]); $posts = $posts->whereBetween('milage',[$min_milage,$max_milage]); $posts = $posts->whereBetween('price',[$min_price,$max_price]); // $posts = $posts->paginate(4); dd($posts->toSql()); 

Есть идеи?

10000