Outils pour utilisateurs

Outils du site


devweb:laravel:collection (lu 6832 fois)

Collection

where

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)

pagination

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

sort sur plusieurs champs

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;
                }
            });
devweb/laravel/collection.txt · Dernière modification: 26-01-2023 18:05 de edmc73