2016-03-24 2 views
-1

У меня есть 3 таблицы DB: Проекты, Голоса и таблица соединений project_votes. В каждом проекте может быть много голосов. Полезно ли использовать столбец статуса в таблице «Голоса» (с возможными значениями «новый» и «старый»), чтобы различать входящие сообщения? В моем приложении, если пользователь открывает свой собственный проект, все новые сообщения должны стать старыми. Я делаю это с помощью следующего кода: Получать новые голоса:Yii2. Какова наилучшая практика для управления новыми сообщениями?

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();   
      } 
    } 

Или есть лучший способ без цикла Еогеаспа. Например, используя обновление с предложением where?

ответ

1

Я предполагаю, что пользователи могут голосовать за проекты. Если да, почему бы не проголосовать за соединительную таблицу.

  • проекта (название идентификатора фонды)
  • голоса (идентификатор project_id значение user_id) // значения являясь средством выражающего голос
  • пользователя (имя идентификатора)

В противном случае, почему не создавать внешний ключ в голосовании, а не добавлять таблицу соединений.

  • проекта (название идентификатора фонды)
  • голоса (идентификатор значение project_id)

Что касается вашего вопроса, я хотел бы добавить логическое поле «чтение» в таблице голосования, который по умолчанию ложно.

Чтобы получить непрочитанные голоса за проект, добавьте его в модель проекта.

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

Для того, чтобы читать голоса после их получения, вы можете использовать updateAll().

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

спасибо. Это полезная информация. – Dmytro

+0

Без проблем, рад помочь. – ttdijkstra