A collection of traits, macros and other helpers to keep your Laravel app feeling fresh.
composer require yabhq/laravel-mint
Allow for models to be archived or unarchived based on an "archived_at" field on the database table. A global scope automatically excludes archived records when querying your model.
use Yab\Mint\Traits\Archivable;
class Example extends Model
{
use Archivable;
}
$example->archive();
$example->unarchive();
Example::query(); // Will exclude archived items...
Example::withArchived(); // With archived items included...
Models which are marked as "immutable" will throw an ImmutableDataException if updated or deleted (but not created).
use Yab\Mint\Traits\Immutable;
class Example extends Model
{
use Immutable;
}
// No problem
$example = Example::create([
'field' => 'value'
]);
// Throws an exception...
$example->update([
'field' => 'updated'
]);
You can also customize the conditions under which a model is immutable by overriding the isImmutable() function on your model:
public function isImmutable()
{
return $this->status === 'closed';
}
Easily use UUIDs for your model's primary key by leveraging the UuidModel trait:
use Yab\Mint\Traits\UuidModel;
class Example extends Model
{
use UuidModel;
}
If you would like to customize the name of the UUID column, simply add the getUuidColumnName function in your model class:
public static function getUuidColumnName(): string
{
return 'my_column_name';
}
A custom cast for storing monetary values as cents in the database while fetching them as decimal values.
use Yab\Mint\Casts\Money;
class Example extends Model
{
protected $casts = [
'price' => Money::class,
];
}
Create slugs that are unique and never collide with each other.
use Yab\Mint\Trails\Slugify;
class Example extends Model
{
use Slugify
}
By default the Slugify trait uses the name property on your model. You can change this behaviour by overriding the getSlugKeyName method on your model.
public static function getSlugKeyName(): string
{
return 'title';
}
The HasAvatar trait allows you to easily support avatars for your users. It even has a built-in Gravatar fallback!
use Yab\Mint\Trails\HasAvatar;
class User extends Model
{
use HasAvatar;
}
You can customize the database field used to retrieve the profile images:
public function getAvatarField() : string
{
return 'profile_picture';
}
It is also possible to determine which field is used for the Gravatar email address:
public function getEmailField(): string
{
return 'email';
}