📜 ⬆️ ⬇️

PHPixie 3.0 ORM or new look at ActiveRecord

image The long-promised third version of the PHPixie ORM component has already been completed. It is now completely independent of the framework and can be safely used on its own. In this regard, while work continues on other components and documentation is written, the developers have compiled a small tutorial in order to be able to start working with ORM. Below I will provide his translation and add a few things from myself, but first, let's see how useful this version will please us:



I hope I could interest you, now we will look at an example from the link above in translation:

')
<?php require_once('vendor/autoload.php'); $config = new \PHPixie\Config(); //    $database = new \PHPixie\Database($config->dataStorage(array( 'default' => array( 'driver' => 'pdo', 'connection' => 'sqlite::memory:' ) ))); //   $orm = new \PHPixie\ORM($database, $config->dataStorage(array( 'relationships' => array( array( //      'type' => 'oneToMany', 'owner' => 'fairy', 'items' => 'flower' ) ) ))); //  $connection = $database->get('default'); $connection->execute(' CREATE TABLE fairies ( id INTEGER PRIMARY KEY, name VARCHAR(255) ) '); $connection->execute(' CREATE TABLE flowers ( id INTEGER PRIMARY KEY, name VARCHAR(255), fairy_id INTEGER ) '); //    //  Repositories, Entities  Query /*        : $fairy->name = 'Trixie'; $fairy->save(); $fairy->where('name', 'Stella')->find(); */ //      $fairyRepository = $orm->get('fairy'); $flowerRepository = $orm->get('flower'); //    //   //   $trixie = $fairyRepository->create(); $trixie->name = 'Trixie'; $trixie->save(); //  $fairyRepository ->create(array('name' => 'Stella')) ->save(); //     foreach(array('Red', 'Yellow', 'Green', 'Purple') as $name) { $flowerRepository ->create(array('name' => $name)) ->save(); } //   Query // WHERE `id` > 1 AND ( `name` = 'Green' OR `name` = 'Red') $green = $flowerRepository->query() ->where('id', '>', 1) ->startAndWhereGroup() ->where('name', 'Green') ->or('name', 'Red') ->endGroup() ->findOne(); //  $green = $flowerRepository->query() ->where('id', '>', 1) ->and(function($q){ $q ->where('name', 'Green') ->or('name', 'Red') }) ->findOne(); // //        //    'flowers'   add(), remove()  removeAll() //     addFlower(), removeFlower()  removeAllFlowers()    $trixie->flowers->add($green); //  ,       //      //        ,      // oneToMany  .   manyToMany     assert($green->fairy() == $trixie); //      Green c  Stella //     //      $stellaQuery = $fairyRepository->query() ->where('name', 'Stella'); //     $allExceptGreen = $flowerRepository->query() ->whereNot('name', 'Green'); //   $stellaQuery->flowers->add($allExceptGreen); // Query      //   Purple  Blue $flowerRepository->query() ->where('name', 'Purple') ->update(array( 'name' => 'Blue' )); //       : $trixie = $fairyRepository->query() ->relatedTo('flowers', $green) ->findOne(); //            //      $fairies = $fairyRepository->query() ->relatedTo('flowers') ->find(array('flowers')); //    //      //  json_encode() print_r($fairies->asArray(true)); //   =) 


Trying this example in yourself is quite simple:

 git clone https://github.com/phpixie/orm cd orm/examples #      curl -sS https://getcomposer.org/installer | php php composer.phar install php quickstart.php 


This ORM has been developed for over a year and we are very interested in all your questions and comments, very much looking forward to comment.

Source: https://habr.com/ru/post/252305/


All Articles