2017-06-20 64 views
0

我正在嘗試編寫高級Eloquent搜索查詢過濾器,但是當我返回集合以查看時,出現以下錯誤Laravel 5.3,調用未定義的方法Illuminate Database Query Builder :: links()

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

我的口才查詢生成器:

$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),它返回我一個生成器實例,但是爲什麼呢?

我的看法代碼如下(以防萬一你在想我改寫$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> 
+0

它表明,如果你使用{{$ catalogos->渲染()}} – Exprator

+0

是鏈接()的方法對於Catalogo類? – Extrakun

+0

@Exprator它給我看到一個類似的錯誤:'調用未定義的方法Illuminate \ Database \ Query \ Builder :: render()' –

回答

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); 
0

從文檔:

Currently, pagination operations that use a groupBy statement cannot be executed efficiently by Laravel. If you need to use a groupBy with a paginated result set, it is recommended that you query the database and create a paginator manually.

你應該按照文檔併爲您的查詢創建一個手動分頁器。

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

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); 
+0

這個想法是將過濾器應用於查詢,我不能一次放置所有查詢。我需要從'$ catalogos = Catalogo :: query()'開始,然後將每個搜索參數作爲修飾符添加到從'$ catalogos = Catalogo :: query();'返回的查詢實例中;' –

+0

問題在功能上與此相同。您可以將'query'的結果存儲在一個變量中,或者直接使用它,這沒有什麼區別。設置者[流利](http://go.aopphp.com/blog/2013/03/19/implementing-fluent-interface-pattern-in-php/) – apokryfos

+0

嗯,我明白了你的觀點,我解決了這個問題,但我很關心laravel文檔中關於「groupBy」語句分頁的說法,它現在對我來說工作正常,但我不知道它是否總能正常工作...... –

相關問題