PHP code example of smoren / yii2-query-relation-manager
1. Go to this page and download the library: Download smoren/yii2-query-relation-manager library. Choose the download type require. 2. Extract the ZIP file and open the index.php. 3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
smoren / yii2-query-relation-manager example snippets
use Smoren\QueryRelationManager\Yii2\QueryRelationManager;
use Smoren\QueryRelationManager\Yii2\QueryRelationDataProvider;
use app\models\City;
use app\models\Address;
use app\models\Place;
use app\models\Comment;
// Let's select addresses with theirs relations: city, places and comments about places
$result = QueryRelationManager::select(Address::class, 'a')
->withSingle('city', City::class, 'c', 'a', ['id' => 'city_id'])
->withMultiple('places', Place::class, 'p', 'a', ['address_id' => 'id'])
->withMultiple('comments', Comment::class, 'cm', 'p', ['place_id' => 'id'])
->all();
print_r($result);
/*Array
(
[0] => Array
(
[id] => 1
[city_id] => 1
[name] => Tverskaya st., 7
[city] => Array
(
[id] => 1
[name] => Moscow
)
[places] => Array
(
[0] => Array
(
[id] => 1
[address_id] => 1
[name] => TC Tverskoy
[comments] => Array
(
[0] => Array
(
[id] => 1
[place_id] => 1
[username] => Ivan Mustafaevich
[mark] => 3
[text] => Not bad, not good
)
[1] => Array
(
[id] => 2
[place_id] => 1
[username] => Peter
[mark] => 5
[text] => Good place
)
[2] => Array
(
[id] => 3
[place_id] => 1
[username] => Mark
[mark] => 1
[text] => Bad place
)
)
)
[1] => Array
(
[id] => 2
[address_id] => 1
[name] => Tverskaya cafe
[comments] => Array
(
)
)
)
)
[1] => Array
(
[id] => 2
[city_id] => 1
[name] => Schipok st., 1
[city] => Array
(
[id] => 1
[name] => Moscow
)
[places] => Array
(
[0] => Array
(
[id] => 3
[address_id] => 2
[name] => Stasova music school
[comments] => Array
(
[0] => Array
(
[id] => 4
[place_id] => 3
[username] => Ann
[mark] => 5
[text] => The best music school!
)
)
)
)
)
[2] => Array
(
[id] => 3
[city_id] => 2
[name] => Mayakovskogo st., 12
[city] => Array
(
[id] => 2
[name] => St. Petersburg
)
[places] => Array
(
[0] => Array
(
[id] => 4
[address_id] => 3
[name] => Hostel on Mayakovskaya
[comments] => Array
(
)
)
[1] => Array
(
[id] => 5
[address_id] => 3
[name] => Mayakovskiy Store
[comments] => Array
(
[0] => Array
(
[id] => 5
[place_id] => 5
[username] => Stas
[mark] => 4
[text] => Rather good place
)
)
)
)
)
[3] => Array
(
[id] => 4
[city_id] => 2
[name] => Galernaya st., 3
[city] => Array
(
[id] => 2
[name] => St. Petersburg
)
[places] => Array
(
[0] => Array
(
[id] => 6
[address_id] => 4
[name] => Cafe on Galernaya
[comments] => Array
(
[0] => Array
(
[id] => 6
[place_id] => 6
[username] => Stas
[mark] => 3
[text] => Small menu, long wait
)
)
)
)
)
)*/
// Now let's select places with it's relations: address, city and comments, and with next conditions
// - comments are rated at least 3
// - if there are no suitable comments, the place is not [id] => 1
[name] => Moscow
[addresses] => Array
(
[0] => Array
(
[id] => 2
[city_id] => 1
[name] => Schipok st., 1
)
[1] => Array
(
[id] => 1
[city_id] => 1
[name] => Tverskaya st., 7
)
)
)
[1] => Array
(
[id] => 2
[name] => St. Petersburg
[addresses] => Array
(
[0] => Array
(
[id] => 4
[city_id] => 2
[name] => Galernaya st., 3
)
[1] => Array
(
[id] => 3
[city_id] => 2
[name] => Mayakovskogo st., 12
)
)
)
)*/
// Let's use a simplified syntax for building queries
// We select addresses with their relations: city, places and their comments which rated at least 3
// City:select() method added to City model by using ActiveRecordTrait
$result = Address::select('a')
->with('city', 'c')
->with('places', 'p')
->with(
'comments', 'cm', 'p',
'left', 'and cm.mark >= :mark', [':mark' => 3]
)
->all();
print_r($result);
/*Array
(
[0] => Array
(
[id] => 1
[city_id] => 1
[name] => Tverskaya st., 7
[city] => Array
(
[id] => 1
[name] => Moscow
)
[places] => Array
(
[0] => Array
(
[id] => 1
[address_id] => 1
[name] => TC Tverskoy
[comments] => Array
(
[0] => Array
(
[id] => 1
[place_id] => 1
[username] => Ivan Mustafaevich
[mark] => 3
[text] => Not bad, not good
)
[1] => Array
(
[id] => 2
[place_id] => 1
[username] => Peter
[mark] => 5
[text] => Good place
)
)
)
[1] => Array
(
[id] => 2
[address_id] => 1
[name] => Tverskaya cafe
[comments] => Array
(
)
)
)
)
[1] => Array
(
[id] => 2
[city_id] => 1
[name] => Schipok st., 1
[city] => Array
(
[id] => 1
[name] => Moscow
)
[places] => Array
(
[0] => Array
(
[id] => 3
[address_id] => 2
[name] => Stasova music school
[comments] => Array
(
[0] => Array
(
[id] => 4
[place_id] => 3
[username] => Ann
[mark] => 5
[text] => The best music school!
)
)
)
)
)
[2] => Array
(
[id] => 3
[city_id] => 2
[name] => Mayakovskogo st., 12
[city] => Array
(
[id] => 2
[name] => St. Petersburg
)
[places] => Array
(
[0] => Array
(
[id] => 4
[address_id] => 3
[name] => Hostel on Mayakovskaya
[comments] => Array
(
)
)
[1] => Array
(
[id] => 5
[address_id] => 3
[name] => Mayakovskiy Store
[comments] => Array
(
[0] => Array
(
[id] => 5
[place_id] => 5
[username] => Stas
[mark] => 4
[text] => Rather good place
)
)
)
)
)
[3] => Array
(
[id] => 4
[city_id] => 2
[name] => Galernaya st., 3
[city] => Array
(
[id] => 2
[name] => St. Petersburg
)
[places] => Array
(
[0] => Array
(
[id] => 6
[address_id] => 4
[name] => Cafe on Galernaya
[comments] => Array
(
[0] => Array
(
[id] => 6
[place_id] => 6
[username] => Stas
[mark] => 3
[text] => Small menu, long wait
)
)
)
)
)
)*/