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:<?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)); // =) git clone https://github.com/phpixie/orm cd orm/examples # curl -sS https://getcomposer.org/installer | php php composer.phar install php quickstart.php Source: https://habr.com/ru/post/252305/
All Articles