dive-be/eloquent-utils

Declarative Eloquent utilities for an improved DX
10,203 5
Install
composer require dive-be/eloquent-utils
Latest Version:0.4.0
PHP:~8.4
Laravel:12
Older releases:9 · 10 · 11
License:MIT
Last Updated:May 5, 2025
Links: GitHub  ·  Packagist
Maintainer: dive

🛠 Eloquent utilities for improved DX

Latest Version on Packagist

This package is a collection of declarative tools for common Eloquent tasks.

Installation

You can install the package via composer:

composer require dive-be/eloquent-utils

Usage

Again, the primary purpose is to provide a declarative interface for frequent imperative tasks. The added benefit is that a person skimming through the model can immediately see what's going on due to the declarative nature.

DisablesTimestamps

Disables the created_at and updated_at auto-updates.

class Country extends Model
{
    use \Dive\Eloquent\DisablesTimestamps;
}

InteractsWithStaticData

Depends on: DisablesTimestamps, Unwritable

Prevent unnecessary database round-trips by caching each and every record next to your static model.

Migration

Define a unique column.

Schema::create('languages', static function (Blueprint $table) {
    $table->id();
    $table->char('iso', 2)->unique();
});
Model

The source data is defined in the same file.

final class Language extends Model
{
    use \Dive\Eloquent\InteractsWithStaticData;
}

Language::$source = [
    'DE' => ['id' => 1, 'iso' => 'DE'],
    'EN' => ['id' => 2, 'iso' => 'EN'],
    'FR' => ['id' => 3, 'iso' => 'FR'],
    'NL' => ['id' => 4, 'iso' => 'NL'],
];
(Database)Seeder
public function run(ConnectionInterface $db)
{
    $db->table('languages')->insert(Language::$source);
}
Use

No database queries will be performed...

Language::find('NL'); // App\Models\Language { #3645 }

Unguarded

Disables mass assignment protection on a per model basis.

class Product extends Model
{
    use \Dive\Eloquent\Unguarded;
}
Product::find(1337)->fill([
    'sku' => 'abcdefg',
])->save(); // true

Unwritable

Makes your Eloquent model read-only.

class Coupon extends Model
{
    use \Dive\Eloquent\Unwritable;
}
Coupon::find(10)->update(['code' => 'je-suis-rogue']); // BadMethodCallException

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email oss@dive.be instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Related Packages

laravilt/support

Foundation package providing base components, utilities, and contracts for all L...

1,609 0
ca-santos/laravel-support

General-purpose, domain-organized helper library for Laravel applications

2,906 1
spatie/laravel-sluggable

Generate slugs when saving Eloquent models

14,952,324 1,558
hootlex/laravel-friendships

This package gives Eloquent models the ability to manage their friendships.

129,297 697
kodeine/laravel-acl

Light-weight role-based permissions for Laravel 5 built in Auth system.

365,640 775

Version History

Version Released PHP Laravel License
0.4.0 ~8.4 ^12.0 MIT
0.3.0 ~8.3 ^11.0 MIT
0.2.0 ~8.2 ^10.0 MIT
0.1.2 ^8.1 ^9.0 MIT
0.1.1 ^8.1 ^9.0 MIT