Как получить модель с ее связями одним запросом?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
brain2xml
Сообщения: 43
Зарегистрирован: 2013.07.06, 09:28

Как получить модель с ее связями одним запросом?

Сообщение brain2xml »

Добрый день!

у меня 2 модели Material и Data

прописана связь

Код: Выделить всё

public function getData()
    {
        return $this->hasOne(Data::className(), ['id' => 'id']);
    }
если я хочу получить поле titile таблицы data я пишу $material->data->title

в логах 2 запроса

Код: Выделить всё

SELECT * FROM "pgvk_material" WHERE "pgvk_material"."id"=417974
SELECT * FROM "pgvk_data" WHERE "id"=417974
ок, пробую with('data') - тоже самое, 2 запроса
пробую ->joinWith('data')

Код: Выделить всё

SELECT "pgvk_material".*, "pgvk_data".* FROM "pgvk_material" LEFT JOIN "pgvk_data" ON "pgvk_material"."id" = "pgvk_data"."id" WHERE "pgvk_material"."id"=417974
SELECT * FROM "pgvk_data" WHERE "id"=417974
пробую через join

Код: Выделить всё

$material = \app\models\Material::find()
            ->select('"pgvk_material".*,  "pgvk_data".*')
            ->innerJoinWith(
                'data',
                'pgvk_material.id = pgvk_data.id')
            ->where(['pgvk_material.id'=> 417974])
            ->one();

Код: Выделить всё

SELECT "pgvk_material".*, "pgvk_data".* FROM "pgvk_material" INNER JOIN "pgvk_data" ON "pgvk_material"."id" = "pgvk_data"."id" WHERE "pgvk_material"."id"=417974
SELECT * FROM "pgvk_data" WHERE "id"=417974
ну как так, получается никак?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Как получить модель с ее связями одним запросом?

Сообщение samdark »

Да. with() помогает не делать N запросов для выборки N моделей с их relation-ами. То есть при большем количестве моделей останется два запроса.
Ответить