Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Boa Noite, estou tentando fazer uma paginaçao na query de um metodo e nao estou conseguido, alguém para ajudar? obs: ja tentei usar paginate ,e nao consegui o resultado esperado talvez nao tenha aplicado da maneira correta.

public function DernieresOffres7jours() {

$offresjours = DB::select('select domainesNom as Domaine, serieSpectaclesNom as Nom, spectaclesNo as No, spectaclesDate as Date, spectaclesHeure as Heure, spectaclesDateApprouve as DateApprouve, spectaclesApprouve as Approuve, spectaclesNbBilletsGratuitsOfferts as NbGratuits, spectaclesNbBilletsPayantsOfferts as NbPayants FROM spectacles, seriespectacles, domaines WHERE domainesNo= seriespectaclesNoDomaine AND seriespectaclesNo= spectacles.spectaclesNoSerieSpectacles AND left(spectaclesDateApprouve,10) >= adddate(now(), interval -7 day) and left(spectaclesDateApprouve,10) <= now() order by No');

return view ('Spectacles/OffresBillets/DernieresOffres7jours')->with('offresjours', $offresjours);

}

3 respostas

Se o erro que apareceu na tela foi Call to a member function paginate() on a non-object, então precisa fazer algo assim:

DB::select('...')->paginate(10);

Outra forma de fazer é criando uma instância de Illuminate\Pagination\Paginator ou Illuminate\Pagination\LengthAwarePaginator, caso você precise de uma paginação com algum detalhe a mais.

Bom como disse Ja tinha tentando com o Paginate, e também ja tinha feito a instancia, o erro apresentado é o seguinte: Call to a member function paginate() on array in /Users/JohnPires/annexeDev/atuvu/app/Http/Controllers/SpectaclesController.php on line 19

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

use atuvu\Spectacles;
use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;
/**
 * Spectacles Controller
 */
class SpectaclesController extends Controller
{
     /*Offres Billets*/
     public function DernieresOffres7jours()
     {
       ini_set('memory_limit', '3072M');
       $offresjours = DB::select('select domainesNom as Domaine, serieSpectaclesNom as Nom, spectaclesNo as No, spectaclesDate as Date, spectaclesHeure as Heure, spectaclesDateApprouve as DateApprouve, spectaclesApprouve as Approuve, `spectaclesNbBilletsGratuitsOfferts` as NbGratuits, `spectaclesNbBilletsPayantsOfferts` as NbPayants
       FROM `spectacles`, seriespectacles, domaines WHERE domainesNo= seriespectaclesNoDomaine AND seriespectaclesNo= spectacles.spectaclesNoSerieSpectacles AND left(`spectaclesDateApprouve`,10) >= adddate(now(), interval -7 day) and left(`spectaclesDateApprouve`,10) <= now() order by No')->paginate(10);

         return view ('Spectacles/OffresBillets/DernieresOffres7jours')->with('offresjours', $offresjours);
     }
}
solução!

OK tá com cara que a versão do Laravel usada não retorna um Collection quando usa o QueryBuilder, coisa pedida em 2015 https://github.com/laravel/framework/issues/10478 e implementada no Laravel 5.3.

Sendo assim, as opções:

$itens = collect($offresJours);

ou

<?php
/**
  * Gera a paginação dos itens de um array ou collection.
  *
  * @param array|Collection      $items
  * @param int   $perPage
  * @param int  $page
  * @param array $options
  *
  * @return LengthAwarePaginator
  */
public function paginate($items, $perPage = 15, $page = null, $options = [])
{
    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
    $items = $items instanceof Collection ? $items : Collection::make($items);
    return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}

Fonte: https://gist.github.com/vluzrmos/3ce756322702331fdf2bf414fea27bcb

ou

$itens = new Collection();
foreach($offersjours as $offer) {
    $itens->push($offer);
}

return $itens;