我有以下表格:
用户
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来实现它的方法。是否可以将这些字段添加到项目模型或其他位置?如果有可能,请告诉我,如何实施?
答案 0 :(得分:0)
您必须为您需要的字段添加var。
对于activerecord,Yii2自动生成从表模式中检索的字段。对于计算字段,如使用AS
结果查询别名,您必须将相关的var名称添加到模型
class yourClass extends \yii\db\ActiveRecord
{
public $your_var_name;
/**
* @inheritdoc
*/
public static function tableName()
{
return 'your_table';
}
确保var名称与查询中使用的别名完全匹配。 然后你可以像模型中的其他人一样引用这个新领域。