Laravel 5.3,调用未定义的方法Illuminate \ Database \ Query \ Builder :: links()

时间:2017-06-20 16:31:35

标签: php mysql laravel query-builder

我正在尝试编写高级的Eloquent搜索查询过滤器但是当我返回要查看的集合时,我收到以下错误

Call to undefined method Illuminate\Database\Query\Builder::links()

我的Eloquent查询构建器:

$catalogos = Catalogo::query();

$catalogos->where('catalogo.subcategoria',$filtro)
                                ->join('productos', 'productos.catalogo_id','=','catalogo.id')
                                ->join('productos_precios','productos_precios.segment','=','productos.codigo_oracle')
                                ->join('fotos_productos','fotos_productos.producto_id','=','productos.id')
                                ->select('catalogo.descripcion', 'catalogo.descripcion_corta','catalogo.id','fotos_productos.nombre as ruta', 'productos_precios.precio')
                                ->whereNotNull('fotos_productos.nombre')
                                ->orderBy('precio', 'asc')
                                ->groupBy('catalogo.id')
                                ->paginate(24);

是的,如果我dd($catalogos),它会返回一个Builder实例,但为什么?

我的观看代码如下(以防您认为我覆盖了$catalogos变量的值):

@foreach($catalogos as $catalogo)   

                            <div class="producto_tienda">
                                <a href="{{route('detalle-producto', [$catalogo->id,$catalogo->slug] ) }}">
                                    <div class="foto_producto" style="background-image:url('{{ asset("public/images/tienda/".$catalogo->ruta) }}')">
                                        @if($catalogo->stock>0 && $catalogo->stock<10)
                                        <div class="etiquetas">
                                            <p class="existencia">Últimos productos</p>
                                        </div>
                                        @endif

                                        @if($catalogo->stock==0)
                                        <div class="etiquetas">
                                            <p class="descuento">Agotado</p>
                                        </div>
                                        @endif

                                    </div>
                                </a>
                                <a href="{{route('detalle-producto', [$catalogo->id,$catalogo->slug])}}">
                                    <div class="descripcion_producto">{{ $catalogo->descripcion_corta }}</div>
                                </a>
                                <div class="precio_producto">{{ money_format( '%.2n' ,$catalogo->precio) }}</div>

                            </div>



                    @endforeach     
                    <div class="text-center">
                        {{ $catalogos->links() }}
                    </div>

3 个答案:

答案 0 :(得分:1)

您没有将paginate的返回值分配给任何内容。它应该是:

$catalogos = Catalogo::query()->where('catalogo.subcategoria',$filtro)
                            ->join('productos', 'productos.catalogo_id','=','catalogo.id')
                            ->join('productos_precios','productos_precios.segment','=','productos.codigo_oracle')
                            ->join('fotos_productos','fotos_productos.producto_id','=','productos.id')
                            ->select('catalogo.descripcion', 'catalogo.descripcion_corta','catalogo.id','fotos_productos.nombre as ruta', 'productos_precios.precio')
                            ->whereNotNull('fotos_productos.nombre')
                            ->orderBy('precio', 'asc')
                            ->groupBy('catalogo.id')
                            ->paginate(24);

答案 1 :(得分:1)

现在似乎正在使用它:

$catalogos = Catalogo::query();
$catalogos = $catalogos->where('catalogo.subcategoria',$filtro)
                                    ->join('productos', 'productos.catalogo_id','=','catalogo.id')
                                    ->join('productos_precios','productos_precios.segment','=','productos.codigo_oracle')
                                    ->join('fotos_productos','fotos_productos.producto_id','=','productos.id')
                                    ->select('catalogo.descripcion', 'catalogo.descripcion_corta','catalogo.id','fotos_productos.nombre as ruta', 'productos_precios.precio')
                                    ->whereNotNull('fotos_productos.nombre')
                                    ->orderBy('precio', 'asc')
                                    ->groupBy('catalogo.id')
                                    ->paginate(24);

答案 2 :(得分:0)

来自文档:

  

目前,Laravel无法有效地执行使用groupBy语句的分页操作。如果需要将groupBy与分页结果集一起使用,建议您查询数据库并手动创建分页器。

您应该按照文档并为查询创建手动分页器。

https://laravel.com/docs/5.4/pagination#manually-creating-a-paginator