Оптимизация запросов yii2

проект https://gitlab.com/des1roer/yii2pet

пусть view views/pers/index.php


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'name',
            'lvl',
            'money',
            [
                'attribute' => 'race_id',
                'format' => 'raw',
                'label' => 'раса',
                'filter' => $races,
                'value' => 'race.name'
            ],
            [
                'label' => 'Изображение',
                'format' => 'html',
                'value' => function ($data) {
                    return Html::img($data->race->img, ['width' => '100']);
                },
            ],
            [
                'format' => 'raw',
                'label' => 'Армия',
                'value' => function ($data) {
                    /** @see \app\models\Pers::getUnitNames */
                    return $data->unitNames;
                },
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

контроллер \app\controllers\PersController::actionAdmin


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    public function actionAdmin()
    {
        $dataProvider = new ActiveDataProvider([
            'query' => Pers::find(),
        ]);

        return $this->render('index', [
            'dataProvider' => $dataProvider,
            'races' => \yii\helpers\ArrayHelper::map(Pers::getRaces(), 'id', 'name'),
        ]);
    }

получили 2 запроса

если же добавить with


1
2
3
        $dataProvider = new ActiveDataProvider([
            'query' => Pers::find()->with('race'),
        ]);

то запрос остается один


with можно использовать через несколько связей. вот так выглядит оптимизированный запрос


1
2
3
4
5
6
7
8
      $dataProvider = new ActiveDataProvider([
            'query' => Pers::find()->with([
                'race',
                'units',
                'persUnits.position',
                'persUnits.unit',
            ]),
        ]);






















Популярные сообщения из этого блога

Пишем логи на C# (.NET). Легкий способ.

Авторизация yii 2 из базы

Средства для работы с базой данный PostgreSql