Итак, дано:
* Есть модель A, с определенной связью hasOne на модель B. Обычная принадлежность определенному автору.
* Есть REST-endpoint на который придет клиент и ожидает получить такой JSON:
{
success: true,
code: 200,
data: [{
id: 1, // <- From table A
title: "TESTTESTTEST", // <- From table A
description: "LONGTESTDESCRIPTION", // <- From table A
username: "IvanBEST" // <- From table B and from field "username"
},
{
id: 2, // <- From table A
title: "Post #777", // <- From table A
description: "Lorem ipsum...", // <- From table A
username: "Oleg222" // <- From table B and from field "username"
},
{
...
}
]
}
Полей в модели на самом деле много, сейчас хотелось бы хотя бы научить модель резолвить связи, но тут проблема:
public function actionIndex()
{
return MyModel::find()->with(['author'])->all();
}
Возвращает следующий массив JSON:
{
"success": true,
"code": 200,
"data": [
{
"id": 1,
"title": "Faker id5975f7355e568",
"description": "Voluptas cum incidunt et enim...",
"author_id": 1, // <--
"image_id": 1,
"parent_id": null,
"created_at": "2017-07-24 16:33:41",
},
{
"id": 2,
"title": "Faker id5975f7357aa18",
"description": "Eum dolores eum maxime quos...",
"author_id": null, // <-- ТУТ ясно
"image_id": 1,
"parent_id": null,
"created_at": "2017-07-24 16:33:41",
},
]
}
А желаемая конструкция:
return Quest::find()->select(['id', 'title', 'description', 'author.username'])->with(['author'])->all();
... Вообще кидает ошибку в которой видно, что Yii2 не джойнит таблицы.
Делаю так и всплывает главная проблема:
return Quest::find()->alias('t')->select(['t.id', 't.title', 't.description', 'author.username'])->innerJoinWith(['author author'])->all();
...Данный код создает следущий запрос...
SELECT `t`.`id`, `t`.`title`, `t`.`description`, `author`.`username` FROM `tb__quest` `t` INNER JOIN `tb__user` `author` ON `t`.`author_id` = `author`.`id`
...И вроде все хорошо, но в ответе >>>
{
"id": 1,
"title": "Faker id5975f7355e568",
"description": "Voluptas cum incidunt et enim..."
},
{
"id": 2,
"title": "Faker id5975f735a8923",
"description": "Eum delectus quis vero laborum ab..."
},
Вопрос к коллегам - где поле username и где ошибка????