️ Ce package va être obsolète au profit de celui-ci : https://github.com/open-southeners/laravel-model-status
Statuts typés par code Laravel pour les modèles Eloquent.
Vous pouvez installer le package via composer :
composer require skore-labs/laravel-status
Ensuite, vous devrez publier la configuration et les migrations du package, afin de pouvoir modifier et/ou migrer la nouvelle table des statuts :
php artisan vendor:publish --provider="SkoreLabsLaravelStatusServiceProvider"
Ajoutez des statuts à votre modèle en ajoutant SkoreLabsLaravelStatusTraitsHasStatuses et l'interface SkoreLabsLaravelStatusContractsStatusable afin qu'il puisse transmettre certains événements prédéfinis (voir ci-dessus), voici un exemple :
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use SkoreLabs LaravelStatus Contracts Statusable ;
use SkoreLabs LaravelStatus Traits HasStatuses ;
class Post extends Model implements Statusable
{
use HasStatuses;
// Your model logic here...
}Personnalisez enum pour la vérification de l'état (à l'aide du package spatie/enum , consultez leur documentation) :
/**
* Get the statuses enum used for some utilities.
*
* @return string|SpatieEnumEnum
*/
public static function statusesClass ()
{
return App Statuses PostStatuses::class;
} Remarque : Ceci n'est pas obligatoire, uniquement si toutes vos classes d'énumération d'état de modèle ne sont PAS stockées dans AppEnums en tant que ModelStatus .
Remarque : Toutes les méthodes ne sont pas sensibles à la casse dans les noms d'état.
Vérifiez si le modèle a un ou plusieurs statuts.
Remarque : Il renvoie le nom de l'état correspondant actuel.
// Post has status Published
$ post -> hasStatus ( ' published ' );
// Post has status Published or Was Published
$ post -> hasStatus ([ ' published ' , ' was published ' ]);Définir le statut ou muter le statut uniquement si le statut précédent correspond à la clé.
// Set post status to Was Published
$ post -> setStatus ( ' was published ' );
// Change if post has status Published to Was Published.
$ post -> setStatus ([ ' published ' => ' was published ' ]);Vous pouvez également utiliser l'attribut pour définir un statut :
$ post -> status = ' was published ' ;
// Better use status method for this
if ( $ post -> hasStatus ( ' published ' )) {
$ post -> status = ' was published ' ;
}
// When save it check and attach the status
$ post -> save (); Vous pouvez également faire la même chose avec la méthode setStatusWhen comme dans l'exemple ci-dessus avec setStatus .
// Change if post has status Published to Was Published.
$ post -> setStatusWhen ( ' published ' , ' was published ' );Si un paramètre est fourni, il agit comme un alias de hasStatus.
Si un tableau associatif est fourni, il agit comme un alias de setStatus.
Sinon, il récupérera simplement la relation sous la forme $post->status ou $post->status()->first()
Vous pouvez également filtrer par portée :
Post:: status ( ' published ' );
Post:: where ( ' user_id ' , Auth:: id ())-> status ( ' published ' );Obtenez tous les statuts de modèles possibles.
Post:: statuses ();
// You can use Status model as well
Status:: getFrom (Post::class);
// Also specify value to return like '->value('id')'
Status:: getFrom (Post::class, ' id ' );
// Or return the object with columns like '->first(['id', 'name'])'
Status:: getFrom (Post::class, [ ' id ' , ' name ' ]);Obtenez l'état par défaut du modèle.
// Default status for post is Published, so it returns Published
Post:: getDefaultStatus ();
// You can use Status model query scope as well
Status:: query ()-> defaultFrom (Post::class)-> first ();Ceci et tous nos packages Laravel suivent autant que possible le support LTS de Laravel.
Lire la suite : https://laravel.com/docs/master/releases#support-policy