Метод Laravel Illuminate \ Database \ Eloquent \ Collection :: toSql не существует. ошибка - PullRequest
0 голосов
/ 14 мая 2019

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

dd($posts->toSql());

выдает ошибку

"Illuminate\Database\Eloquent\Collection::toSql does not exist."

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

"Method Illuminate\Database\Eloquent\Collection::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 ]

3 голосов
/ 14 мая 2019

Laravel: 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());
2 голосов
/ 14 мая 2019

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

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

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

use Illuminate\Support\Facades\DB;

// ...

DB::listen(function ($query) {
    var_dump($query->sql);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...