2
thewunder/corma - Packagist
source link: https://packagist.org/packages/thewunder/corma
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README
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 ~4.0
Or add the following to the require section your composer.json:
"thewunder/corma": "~4.0"
For PHP versions < 8.0 use Corma version ~3.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, $container); //uses any PSR-11 compatible DI container $object = $orm->create(YourDataObject::class); //Call setters... $orm->save($object); //Call more setters... $orm->save($object); //Call more setters on $object... $objects = [$object]; $newObject = $orm->create(YourDataObject::class); //call setters on $newObject.. $objects[] = $newObject; $orm->saveAll($objects); //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 $orm->deleteAll($existingObjects);
Documentation
See the wiki for full documentation.
Contributing
Please see CONTRIBUTING for details.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK