У меня есть следующие таблицы:Добавить статистическую информацию ActiveRecord модели отношения
пользователя
id
login
password
веха
id
expected_date
completion_date
project_id
user_id
проект
id
title
description
У меня уже созданы классы ActiveRecord User, Milestone, Project. Все поля в этих классах точно такие же, как и атрибуты в соответствующих таблицах БД.
Мне нужно отобразить список проектов, назначенных указанному пользователю. Он должен выглядеть следующим образом:
ID | Title | Amount of milestones | Amount of completed milestones
Теперь я ВОССТАНОВЛЕНИЕ проекты, как это:
$projects = Yii::$app->user->identity->getAssignedProjects()->all();
Где getAssignedProjects()
метод выглядит следующим образом:
class User extends \yii\db\ActiveRecord implements IdentityInterface
{
...
public function getAssignedProjects()
{
return $this->hasMany(Project::className(), ['id' => 'project_id'])->via('milestones');
}
}
Этот метод возвращает мне все проекты назначенный пользователю. Но, однако, эти модели не имеют количества этапов и количества завершенных этапов.
я могу получить всю необходимую информацию с помощью следующего SQL запроса:
SELECT
proj.*
FROM
(
SELECT
t.*,
COUNT(m.completion_date) AS completed,
COUNT(1) AS total
FROM project AS t
LEFT JOIN milestone AS m ON m.project_id = t.id
GROUP BY t.id
) AS proj
INNER JOIN milestone AS ms ON ms.project_id = proj.id
WHERE ms.user_id = 1
GROUP BY proj.id;
Но я не могу найти способ реализовать его с точки зрения ActiveRecord. Можно ли добавить эти поля в модель проекта или в другое место? Если это возможно, можете ли вы показать мне, пожалуйста, как это реализовать?
Да, я прочитал что-то подобное в документах или других вопросах. Однако я не понимаю, куда поместить код, который отвечает за получение статистической информации. Можно ли загружать эту информацию, когда я вызываю метод 'Yii :: $ app-> user-> identity-> getAssignedProjects() -> all();'? И, также, нужно ли использовать QueryBuilder или работать с простым SQL? – DWand
Конструктор запросов является более прямым (простым) решением. Для модели пользователя я не знаю, имеет ли право доступ к идентификационной информации, как вы упомянули, но вы можете получить значение по модели пользователя. Пользователь: AssignedProject. Я надеюсь, что это полезно для вас. – scaisEdge
Я думаю, я понимаю, что вы имеете в виду. Спасибо. Я оставлю этот вопрос открытым на пару дней. На всякий случай кто-то сможет предложить что-то еще. – DWand