Attention le where de Collection est différent du where de Eloquent. Il est strict avec un ===
!
Pour contourner le problème
Si votre ‘id’ est transformé en string par eloquent par exemple, un where(‘id’,1) ne fonctionnera pas. Pour assurer la compatibilité entre plusieurs serveurs :
$collect->where('id', 1, false)
ou
$collect->whereLoose('id', 1)
Rendre une collection paginable
Ajouter ce code dans app/Providers/AppServiceProvider.php
<?php namespace App\Providers; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\Paginator; use Illuminate\Support\Collection; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Collection::macro('paginate', function(int $perPage = 15, $page = null, $options = []) { /** @var Collection $this */ $page = $page ?: (Paginator::resolveCurrentPage() ?: 1); $lap = new LengthAwarePaginator( $this->forPage($page, $perPage)->values(), $this->count(), $perPage, $page, $options ); $lap->setPath(url()->current()); return $lap; }); }
Ensuite, utiliser comme le paginate() de eloquent
$data = collect($myArray); $data = $data->paginate(10);
Si c’était une requête sql
SELECT * FROM `liste_programmes` ORDER BY `date_version` DESC, `order`, `nom`
$filtre_programme=collect($filtre_programme)->sortBy( function($p){ return [ - strtotime($p->date_version), $p->order, $p->nom, ]; })->values();
Trier comme on veut
$permissions = $permissions->sortBy(function($p){ switch ($p->role) { case "administrator": return "A"; break; case "assigner": return "B"; break; case "assignable": return "C"; break; default: return "Z"; break; } });