Yii2。管理新邮件的最佳做法是什么?

时间:2016-03-24 06:36:36

标签: yii2 messages

我有3个数据库表:项目,投票和联结表project_votes。每个项目都可以有很多投票。在Votes表中使用状态列(使用可能的值" new"" old")以区分传入消息是不是一个好主意?在我的应用程序中,如果用户打开自己的项目,则所有新消息都应该变旧。我用以下代码执行此操作: 获得新的选票:

public function getNewVotes()
    {
        return $this->hasMany(Vote::className(), ['id' => 'vote_id'])->where(['like', 'status', 'new'])->via('projVotes');
    }

将所有选票设为旧:

$model->newVotes = 'old'//  in Controller

public function setNewVotes($var)// in Model
    {
    foreach ($this->newVotes as $value) {
            $value->status = $var;
            $value->update();           
            }
    }

或者没有foreach循环有更好的方法。例如,使用带子句的更新?

1 个答案:

答案 0 :(得分:1)

我假设用户可以投票支持项目。如果是这样,为什么不投票给联络表。

  • 项目(身份名称基金)
  • vote(id project_id user_id value)//值是一种手段 表达投票
  • 用户(身份证名称)

否则,为什么不在投票中创建外键而不是添加联结表。

  • 项目(身份名称基金)
  • 投票(id project_id value)

至于你的问题,我会在投票表中添加一个布尔字段'read',默认为false。

要获取项目的未读投票,请将其添加到项目模型中。

public function getUnreadVotes()
{
    return Vote::find()->where([
        'project_id' => $this->id, 
        'read' => false
    ])->all();
}

为了在获取投票后将其设置为读取,您可以使用updateAll()。

Vote::updateAll(['read' => true], ['project_id' => $this->id]);