gpt4 book ai didi

mysql - 向 ActiveRecord 模型关系添加统计信息

转载 作者:行者123 更新时间:2023-11-30 22:31:23 27 4
gpt4 key购买 nike

我有以下表格:

用户

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 来实现它。是否可以将这些字段添加到项目模型或其他地方?如果可能的话,你能告诉我如何实现吗?

最佳答案

您必须为您需要的字段添加变量。

对于 activerecord Yii2 自动生成从表模式中检索的字段。对于计算字段,例如使用 AS 结果作为查询别名的字段,您必须将相关的 var 名称添加到模型中

class yourClass extends \yii\db\ActiveRecord
{

public $your_var_name;

/**
* @inheritdoc
*/
public static function tableName()
{
return 'your_table';
}

确保 var 名称与您查询中使用的别名完全匹配。然后你可以像模型中的其他字段一样引用这个新字段..

关于mysql - 向 ActiveRecord 模型关系添加统计信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808586/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com