Оптимизация запросов 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',
            ]),
        ]);






















Комментарии

  1. According to Stanford Medical, It is in fact the one and ONLY reason women in this country live 10 years longer and weigh on average 42 lbs less than us.

    (And realistically, it has totally NOTHING to do with genetics or some secret-exercise and EVERYTHING to related to "how" they eat.)

    BTW, What I said is "HOW", not "what"...

    TAP on this link to see if this quick test can help you unlock your real weight loss potential

    ОтветитьУдалить

Отправить комментарий

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

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

Учебник yii2