我有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循环有更好的方法。例如,使用带子句的更新?
答案 0 :(得分:1)
我假设用户可以投票支持项目。如果是这样,为什么不投票给联络表。
否则,为什么不在投票中创建外键而不是添加联结表。
至于你的问题,我会在投票表中添加一个布尔字段'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]);