️ Este paquete quedará obsoleto en favor de este: https://github.com/open-southeners/laravel-model-status
Estados escritos en código Laravel para modelos Eloquent.
Puede instalar el paquete a través del compositor:
composer require skore-labs/laravel-status
Luego necesitarás publicar la configuración del paquete y las migraciones, para luego poder modificar y/o migrar la nueva tabla de estados:
php artisan vendor:publish --provider="SkoreLabsLaravelStatusServiceProvider"
Agregue estados a su modelo agregando SkoreLabsLaravelStatusTraitsHasStatuses
y la interfaz SkoreLabsLaravelStatusContractsStatusable
para que pueda pasar algunos eventos predefinidos (ver arriba), aquí hay un ejemplo:
<?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...
}
Personalice enum para verificar el estado (usando el paquete spatie/enum , verifique su documentación):
/**
* Get the statuses enum used for some utilities.
*
* @return string|SpatieEnumEnum
*/
public static function statusesClass ()
{
return App Statuses PostStatuses::class;
}
Nota: Esto no es obligatorio, solo si NO tiene todas las clases de enumeración de estado de su modelo almacenadas en AppEnums
como ModelStatus
.
Nota: Todos los métodos no distinguen entre mayúsculas y minúsculas en los nombres de estado.
Compruebe si el modelo tiene estados.
Nota: Devuelve el nombre del estado coincidente actual.
// Post has status Published
$ post -> hasStatus ( ' published ' );
// Post has status Published or Was Published
$ post -> hasStatus ([ ' published ' , ' was published ' ]);
Establezca el estado o mute el estado solo si el estado anterior coincide con la clave.
// Set post status to Was Published
$ post -> setStatus ( ' was published ' );
// Change if post has status Published to Was Published.
$ post -> setStatus ([ ' published ' => ' was published ' ]);
También puede utilizar el atributo para establecer un estado:
$ 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 ();
También puedes hacer lo mismo con el método setStatusWhen
como en el ejemplo anterior con setStatus
.
// Change if post has status Published to Was Published.
$ post -> setStatusWhen ( ' published ' , ' was published ' );
Si se proporciona un parámetro, actúa como un alias de hasStatus.
Si se proporciona una matriz asociativa, actúa como un alias de setStatus.
De lo contrario, simplemente recuperará la relación como $post->status
o $post->status()->first()
También puedes filtrar por alcance:
Post:: status ( ' published ' );
Post:: where ( ' user_id ' , Auth:: id ())-> status ( ' published ' );
Obtenga todos los estados posibles del modelo.
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 ' ]);
Obtenga el estado predeterminado del modelo.
// 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 ();
Este y todos nuestros paquetes de Laravel siguen en la medida de lo posible el soporte LTS de Laravel.
Leer más: https://laravel.com/docs/master/releases#support-policy