Corma is a high-performance, convention-based ORM based on Doctrine DBAL.

Croute is great because:

Code Quality Rank: L4
Programming language: PHP
License: MIT License
Latest version: v3.5.0

Corma alternatives and similar libraries

Based on the "Database" category.
Alternatively, view Corma alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Corma or a related project?

Add another 'Database' Library



Latest Version on Packagist [Software License](LICENSE.txt) Build Status Coverage Status SensioLabsInsight

Corma is a high-performance, convention-based ORM based on Doctrine DBAL.

Corma is great because:

  • No complex and difficult to verify annotations or configuration files
  • Promotes consistent code organization
  • Loads and saves one-to-one, one-to-many, and many-to-many relationships with a method call
  • Can save multiple objects in a single query (using an upsert)
  • Makes it easy to cache and avoid database queries
  • Supports soft deletes
  • Makes it easy to handle transactions in a Unit of Work
  • Highly customizable

Corma doesn't:

  • Autoload or lazy load relationships by default
  • Do migrations or code generation

Works in MySql and PostgreSQL.

Install via Composer

Via the command line:

composer.phar require thewunder/corma ~3.0

Or add the following to the require section your composer.json:

"thewunder/corma": "~3.0"

For PHP version > 5.5 < 7.1 use Corma version ~2.0

Basic Usage

Create a DataObject

namespace YourNamespace\Dataobjects;

class YourDataObject {
    protected $id;

    //If the property name == column name on the table your_data_objects it will be saved
    protected $myColumn;

    //Getters and setters..

And a Repository (optional)

namespace YourNamespace\Dataobjects\Repository;

class YourDataObjectRepository extends ObjectRepository {
    //Override default behavior and add custom methods...

Create the orm and use it

$db = DriverManager::getConnection(...); //see Doctrine DBAL docs
$orm = ObjectMapper::withDefaults($db);

$object = $orm->create(YourDataObject::class);
//Call setters...
//Call more setters...

//Call more setters on $object...
$objects = [$object];
$newObject = $orm->create(YourDataObject::class);
//call setters on $newObject..
$objects[] = $newObject;


//find existing object by id
$existingObject = $orm->find(YourDataObject::class, 5);

//find existing objects with myColumn >= 42 AND otherColumn = 1
$existingObjects = $orm->findBy(YourDataObject::class, ['myColumn >='=>42, 'otherColumn'=>1], ['sortColumn'=>'ASC']);

//load relationships
$orm->loadOne($existingObjects, OtherObject::class, 'otherObjectId');
$orm->loadMany($existingObjects, AnotherObject::class, 'yourObjectId');
$orm->loadManyToMany($existingObjects, DifferentObject::class, 'link_table');

//delete those


See the wiki for full documentation.


Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

*Note that all licence references and agreements mentioned in the Corma README section above are relevant to that project's source code only.