2016-03-24 8 views
-1

Ich habe 3 DB-Tabellen: Projekte, Abstimmungen und Junction-Tabelle project_votes. Jedes Projekt kann viele Stimmen haben. Ist es eine gute Idee, eine Statusspalte in der Tabelle "Votes" (mit den möglichen Werten "new" und "old") zu verwenden, um eingehende Nachrichten zu unterscheiden? In meiner App sollten alle neuen Nachrichten alt werden, wenn ein Benutzer sein eigenes Projekt öffnet. Ich tue dies mit folgendem Code: neue Stimmen Adresse:Yii2. Wie werden neue Nachrichten am besten verwaltet?

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

Stellen Sie alle Stimmen alt sein:

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

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

Oder gibt es eine bessere Art und Weise ohne foreach-Schleife. Zum Beispiel mit update mit Where-Klausel?

Antwort

1

Ich nehme an, Benutzer können für Projekte abstimmen. Wenn ja, warum sollte man die Wahl nicht zum Treffpunkt machen?

  • Projekt (id name Fonds)
  • Abstimmung (id project_id User_id value) // Wert ein Mittel ist eine Abstimmung zum Ausdruck
  • Benutzer (id Name)

Warum sonst Erstellen Sie keinen Fremdschlüssel in der Abstimmung, anstatt eine Junction-Tabelle hinzuzufügen.

  • Projekt (id name Fonds)
  • Abstimmung (id project_id Wert)

Was Ihre Frage, würde ich ein boolean Feld 'lesen' in der Abstimmung Tabelle, die standardmäßig auf false hinzuzufügen.

Um die ungelesenen Stimmen für ein Projekt zu erhalten, fügen Sie diese zum Projektmodell hinzu.

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

Um Abstimmungen nach dem Abrufen festzulegen, können Sie updateAll() verwenden.

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

Vielen Dank. Es ist eine nützliche Information. – Dmytro

+0

Kein Problem, ich bin froh, Ihnen helfen zu können. – ttdijkstra

Verwandte Themen