Installation:
composer require volosyuk/simple-eloquent
Add the service provider to config/app.php under providers:
Volosyuk\SimpleEloquent\SimpleEloquentServiceProvider::class,
Basic Usage:
Define a model extending Volosyuk\SimpleEloquent\SimpleEloquent:
use Volosyuk\SimpleEloquent\SimpleEloquent;
class User extends SimpleEloquent
{
protected $table = 'users';
protected $primaryKey = 'id';
}
First Query:
$user = User::find(1);
echo $user->name; // Access attributes directly
Key Files:
SimpleEloquent.php (core class)SimpleEloquentServiceProvider.php (service provider)SimpleEloquentBuilder.php (query builder)Attribute Access:
$user = User::find(1);
$user->name; // Direct access (no getters/setters)
$user->setAttribute('email', 'new@example.com');
Query Building:
$users = User::where('active', 1)->orderBy('name')->get();
// Uses standard Eloquent query builder methods
Relationships (Limited):
// Define relationships in model
public function posts()
{
return $this->hasMany(Post::class);
}
// Access via:
$user->posts; // Collection of related models
Mass Assignment:
$user = User::create([
'name' => 'John',
'email' => 'john@example.com'
]);
SimpleEloquent and Illuminate\Database\Eloquent\Model for advanced features:
class HybridUser extends SimpleEloquent
{
use \Illuminate\Database\Eloquent\Model;
}
getAttributes() to add computed properties:
public function getAttributes()
{
return array_merge(parent::getAttributes(), [
'full_name' => $this->first_name . ' ' . $this
->last_name
]);
}
creating, saved, etc.) via traits:
use \Illuminate\Database\Eloquent\Concerns\HasEvents;
No Getters/Setters:
getAttribute()/setAttribute() in your model.Relationship Limitations:
SimpleEloquent logic.with()) for consistency.Observer Conflicts:
Model may not work as expected.boot():
protected static function boot()
{
parent::boot();
static::observe(UserObserver::class);
}
Primary Key Assumptions:
$primaryKey = 'id' by default. Override if using custom keys.getDirty() or getOriginal() to inspect changes:
dd($user->getDirty(), $user->getOriginal());
config/database.php:
'log' => true,
'log_query_params' => true,
Custom Query Builder:
SimpleEloquentBuilder for domain-specific methods:
class CustomBuilder extends \Volosyuk\SimpleEloquent\SimpleEloquentBuilder
{
public function active()
{
return $this->where('active', 1);
}
}
boot():
protected static function boot()
{
static::addGlobalScope(new \App\Scopes\ActiveScope);
static::setBuilder(new CustomBuilder());
}
Attribute Casting:
getCasts() to handle type conversion:
protected $casts = [
'is_admin' => 'boolean',
'metadata' => 'array',
];
Serialization:
JsonSerializable for custom JSON output:
public function jsonSerialize()
{
return array_merge($this->attributes, [
'formatted_name' => ucfirst($this->name)
]);
}
How can I help you explore Laravel packages today?