achyutn/laravel-helpers

Ready to use Laravel Helpers

v0.9.5 2025-06-25 09:26 UTC

README

Lint PR Bump version Latest Stable Version Total Downloads Dependents

Installation

You can install the package via composer:

composer require achyutn/laravel-helpers

Usage

Traits

You can use following traits for your models:

HasTheSlug

This trait is used to generate slug for your model. It uses cviebrock/eloquent-sluggable package.

Note: You must have slug column in your table. And the source is by default title column but can be changed by setting the $sluggableColumn property in your model.

<?php

namespace App\Models;

use AchyutN\LaravelHelpers\Traits\HasTheSlug;

class Post extends Model
{
    use HasTheSlug;

    protected string $sluggableColumn = 'title';
}

HasTheMedia

This trait is used to add media conversions over the HasMedia trait from spatie/laravel-medialibrary package.

namespace App\Models;

use AchyutN\LaravelHelpers\Traits\HasTheMedia;
use Spatie\MediaLibrary\HasMedia;

class Post extends Model implements HasMedia
{
    use HasTheMedia;
}

or alternatively, you can extend your model using the MediaModel class provided by the package:

namespace App\Models;

use AchyutN\LaravelHelpers\Models\MediaModel;

class Post extends MediaModel
{
    //
}

You can use:

  • cover() to get original image (in format: WebP).
  • small_cover() to get small image (in format: WebP).
  • medium_cover() to get medium image (in format: WebP).
  • large_cover() to get large image (in format: WebP).
Multiple Collections

You can also define multiple collections in your model. For example, if you want to have a gallery and a profile collection along with the default cover collection, you can do it like this:

namespace App\Models;

use AchyutN\LaravelHelpers\Models\MediaModel;

class Post extends MediaModel
{
    protected array $theMediaCollections = ['cover', 'gallery', 'profile'];
}

You can then access these collections using the same methods as above:

$post = Post::find(1);

echo $post->gallery(); // Gallery collection image
echo $post->big_gallery(); // Large gallery image
echo $post->profile(); // Profile collection image
echo $post->medium_profile(); // Medium profile image

HasTheDashboardTraits

This trait is used to add HasTheSlug and HasTheMedia traits to your model.

<?php

namespace App\Models;

use AchyutN\LaravelHelpers\Traits\HasTheDashboardTraits;

class Post extends Model
{
    use HasTheDashboardTraits;
}

CanBeApproved

This trait adds approval logic to your Eloquent models using timestamp-based flags (approved_at, rejected_at). By default, only approved records are returned in queries due to a global scope.

Make sure your model's table includes approved_at and rejected_at columns:

Schema::table('posts', function (Blueprint $table) {
    $table->timestamp('approved_at')->nullable();
    $table->timestamp('rejected_at')->nullable();
});

Then, use the trait in your model:

use AchyutN\LaravelHelpers\Traits\CanBeApproved;

class Post extends Model
{
    use CanBeApproved;
}
Methods
Method Description
setApproved() Marks the model as approved (sets approved_at, clears rejected_at)
setRejected() Marks the model as rejected (sets rejected_at, clears approved_at)
setPending() Resets approval state (clears both approved_at and rejected_at)
$post->setApproved();
$post->setRejected();
$post->setPending();
Scope

The trait adds a global scope to only include approved records. You can override it using the following query macros:

Macro Description
withPending() Includes approved and pending records
onlyPending() Only records where both approved_at and rejected_at are null
withoutApproved() Records that are not approved (includes pending & rejected)
withRejected() Rejected records (rejected_at not null, approved_at null)
onlyRejected() Strictly rejected records (regardless of previous approval)
withAll() Removes global scope and returns all records
Post::withPending()->get();
Post::onlyPending()->get();
Post::withoutApproved()->get();
Post::withRejected()->get();
Post::onlyRejected()->get();
Post::withAll()->count();
Custom Column Names

You can override the default column names by defining constants in your model:

class Post extends Model
{
    use CanBeApproved;

    public const APPROVED_AT = 'approved_time';
    public const REJECTED_AT = 'rejected_time';
}

CanBeInactive

This trait allows Eloquent models to be marked as inactive or active, using a nullable inactive_at timestamp column. By default, only active models are returned from queries due to a global scope.

Setup

Ensure your model's table includes an inactive_at column:

Schema::table('articles', function (Blueprint $table) {
    $table->timestamp('inactive_at')->nullable();
});

Then, use the trait in your model:

use AchyutN\LaravelHelpers\Traits\CanBeInactive;

class Article extends Model
{
    use CanBeInactive;
}
Methods
Method Description
setInactive() Marks the model as inactive (sets inactive_at to current time)
setActive() Marks the model as active (clears the inactive_at column)
$article->setInactive();
$article->setActive();
Scopes

This trait applies a global scope to include only active models by default. Use the following macros to override:

Macro Description
withInactive() Includes both active and inactive models
withoutInactive() Excludes inactive models (same as default scope)
onlyInactive() Returns only inactive models
Article::withInactive()->get();
Article::onlyInactive()->get();
Article::withoutInactive()->count();
Custom Column Name

You can override the column name by defining a constant in your model:

class Article extends Model
{
    use CanBeInactive;

    public const INACTIVE_AT = 'disabled_at';
}

Nepali Helpers

You can simply use following helper functions:

english_nepali_number

Converts english number to nepali number.

<?php

echo(english_nepali_number('१ २३४५६७८०९', 'en')); // 1 234567890

echo(english_nepali_number('1 234567890', 'ne')); // १ २३४५६७८०९

english_nepali

To select value based on the locale.

<?php

echo(english_nepali('नेपाली', 'Nepali', 'en')); // Nepali
echo(english_nepali('नेपाली', 'Nepali', 'ne')); // नेपाली

Validations

LatitudeRule

This rule ensures that the given value is a numeric latitude within the valid range -90 to 90.

use AchyutN\LaravelHelpers\Rules\LatitudeRule;

$request->validate([
    'latitude' => [new LatitudeRule()],
]);

LongitudeRule

This rule ensures that the given value is a numeric longitude within the valid range -180 to 180.

use AchyutN\LaravelHelpers\Rules\LongitudeRule;

$request->validate([
    'longitude' => [new LongitudeRule()],
]);