myfarms / laravel-doctrine
The Doctrine 2 implementation that melts with Laravel 4
Requires
- php: >=5.5.0
- doctrine/migrations: 1.*
- doctrine/orm: 2.5.*
- illuminate/support: 4.*|5.*
Requires (Dev)
- mockery/mockery: dev-master
- phpunit/phpunit: 3.7.*
README
A Doctrine 2 implementation that melts with Laravel 4.
Documentation
Begin reading the full documentation here or go to a specific chapter right away.
- Installation
- How It Works
- Basics
- Entity Manager
- Timestamps
- Soft Deleting
- Authentication
- Schemas
- Doctrine Configuration
- Metadata Configuration
- Annotation Reader
- Metadata
- MIT License
Caveats
At the moment Doctrine\ORM version 2.5 is still in beta. As a result the composer install may require you to change
the minimum-stability
in your composer.json
to dev
.
If you don't want to affect the stability of the rest of the packages, you can add the following property in your composer.json
:
"prefer-stable": true
Installation
Begin by installing the package through Composer. Edit your project's composer.json
to require mitchellvanw/laravel-doctrine
.
This package is still in it's early stages, but fully functional. Is it possible that the API might change slightly, no drastic changes.
"require": { "mitchellvanw/laravel-doctrine": "0.4.*" }
Next use Composer to update your project from the the Terminal:
php composer.phar update
Once the package has been installed you'll need to add the service provider. Open your app/config/app.php
configuration file, and add a new item to the providers
array.
'Mitch\LaravelDoctrine\LaravelDoctrineServiceProvider'
After This you'll need to add the facade. Open your app/config/app.php
configuration file, and add a new item to the aliases
array.
'EntityManager' => 'Mitch\LaravelDoctrine\EntityManagerFacade'
It's recommended to publish the package configuration.
php artisan config:publish mitchellvanw/laravel-doctrine --path=vendor/mitchellvanw/laravel-doctrine/config
2 Minutes
This package uses the Laravel database configuration and thus it works right out of the box. With the Entity Manager facade (or service locator) you can interact with repositories. It might be wise to check out the Doctrine 2 docs to know how it works. The little example below shows how to use the EntityManager in it simplest form.
<?php $user = new User; $user->setName('Mitchell'); EntityManager::persist($user); EntityManager::flush();
The User
used in the example above looks like this.
<?php use Doctrine\ORM\Mapping AS ORM; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string") */ private $name; public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } }
If you've only used Eloquent and its models this might look bloated or frightening, but it's actually very simple. Let me break the class down.
<?php use Doctrine\ORM\Mapping AS ORM; /** * @ORM\Entity * @ORM\Table(name="users") */ class User { /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @ORM\Column(type="string") */ private $name; }
The only thing that's actually important in this entity
are the properties. This shows you which data the entity
holds.
With Doctrine 2 you can't interact with database by using the entity User
. You'll have to use Entity Manager and repositories
.
This does create less overhead since your entities aren't extending the whole Eloquent model
class. Which can dramatically slow down your application a lot if you're working with thousands or millions of records.
License
This package is licensed under the MIT license.