composer require cekurte/eloquentbundle
config/bundles.php:
return [
// ...
Cekurte\EloquentBundle\CekurteEloquentBundle::class => ['all' => true],
];
config/packages/cekurte_eloquent.yaml:
cekurte_eloquent:
db_connection: default
models_namespace: App\Entity
src/Entity/User.php):
namespace App\Entity;
use Cekurte\EloquentBundle\Model\EloquentModel;
class User extends EloquentModel
{
protected $table = 'users';
protected $fillable = ['name', 'email'];
}
use App\Entity\User;
public function index()
{
$users = User::all();
return $this->json($users);
}
create(), find(), save(), delete()) directly in Symfony.$user = new User();
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->save(); // Persists to DB
Model Definition:
EloquentModel and define $table, $fillable, and relationships (e.g., $belongsTo, $hasMany).class Post extends EloquentModel
{
public function user()
{
return $this->belongsTo(User::class);
}
}
Service Integration:
EloquentManager service to dynamically fetch models:
public function __construct(private EloquentManager $eloquent)
{
}
public function getPost($id)
{
return $this->eloquent->getModel('App\Entity\Post')->find($id);
}
Query Building:
where(), orderBy(), with()):
$activeUsers = User::where('active', true)->with('posts')->get();
Events & Observers:
config/packages/cekurte_eloquent.yaml:
cekurte_eloquent:
observers:
App\Entity\User: App\Observer\UserObserver
ModelType:
use Cekurte\EloquentBundle\Form\ModelType;
$builder->add('user', ModelType::class, [
'model' => User::class,
'fields' => ['name', 'email'],
]);
toArray() or toJson() for serialization:
return $this->json(User::find(1)->toArray());
Deprecated Package:
illuminate/database, laravel/framework) manually.Namespace Conflicts:
Illuminate namespace, which may clash with other bundles.composer.json or use fully qualified paths.Missing Features:
Accessors/Mutators (use __get()/__set() in models).HasApiTokens or Scopes (implement manually).Configuration Overrides:
db_connection) must match Symfony’s Doctrine setup.Cekurte\EloquentBundle\DependencyInjection\Configuration for defaults.config/packages/dev/doctrine.yaml:
doctrine:
dbal:
logging: true
profiling: true
models_namespace.db_connection matches Symfony’s Doctrine DSN.boot() in your model to add logic:
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->created_at = now();
});
}
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
class AddCustomEloquentServicePass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$definition = $container->findDefinition('cekurte_eloquent.manager');
$definition->addMethodCall('addCustomModel', [MyCustomModel::class]);
}
}
public function scopeActive($query)
{
return $query->where('active', true);
}
Usage: User::active()->get();How can I help you explore Laravel packages today?