2016-04-13 8 views
0

Ich habe eine grundlegende Yii2-Anwendung, in der der Benutzer Mahlzeiten mit einem Status (enum offen oder geschlossen) erstellen kann. Die Idee ist, dass es nur 1 Datensatz mit dem Status offen sein sollte. Gibt es einen einfachen Weg in Yii2, um zu prüfen, ob bereits ein Datensatz mit einem offenen Status vorhanden ist, bevor der neue Datensatz hinzugefügt wird?Gibt es eine Möglichkeit, zu überprüfen, ob eine Datenbanktabelle bereits einen Datensatz mit einem bestimmten Wert in Yii2 enthält

bearbeiten

Apologies für die unklare Beschreibung meines Problems. Was i'am versuchen würde so aussehen, dies zu erreichen: enter image description here

Also, wenn eine neue Mahlzeit gemacht wird, entweder der Status geschlossen werden muss, oder der Status des Eintrags mit offenem hat bearbeitet werden geschlossen werden so dass die neue Mahlzeit kann mit einem offenen Status

+1

zeigen Sie uns, was Sie getan haben/versuchen. \t Bitte lesen Sie [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t Und hier ist ein großartiger Ort, um [** START **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) um zu erfahren, wie Sie Ihre Fragequalität verbessern und bessere Antworten erhalten. –

Antwort

2

Sie sollten so etwas wie dies versuchen erstellt werden:

// add this custom validator to your model's rules 
['status', function ($attribute, $params) { 
    if ($this->getIsNewRecord() && $this->$attribute === 'open' && Meal::find([$attribute => 'open'])->count()>0) 
     $this->addError($attribute, 'Error message.'); 
}], 
+0

Diese einfache Lösung ist so nah! Wenn ich nur den eindeutigen Validator benutze erlaubt es mir nicht mehr als 2 Einträge zu erstellen (1 mit Status offen und 1 mit Status geschlossen) Allerdings erlaubt es mir targetAttribute mehrere "offene" und "geschlossene" Einträge zu machen id increments [wie Sie hier sehen können] (https://i.imgur.com/nZBvtvJ.png) – BreadleyG

+0

Es tut mir leid, ich bin wahrscheinlich nicht klar mit dem, was ich versuche zu tun. Die bearbeitete Antwort macht es unmöglich, mehr als 2 Einträge zu machen. Sobald es 1 mit dem offenen Status und 1 mit dem geschlossenen Status gibt, wird es unmöglich, weitere Einträge hinzuzufügen. Was ich möchte ist, dass es nur 1 Eintrag mit "öffnen" und alle anderen müssen geschlossen werden, es sei denn, der Eintrag mit offenen bekommt ein Update und ist geschlossen – BreadleyG

+0

Dies hat den Trick! Vielen Dank für Ihre Probleme – BreadleyG

1

wie Sie nur einen ‚offenen‘ Statussatz wollen, warum machen Sie einfach Ihre Logik einfach. Bevor Sie einen neuen Datensatz einfügen, aktualisieren Sie alle anderen Datensatzstatus auf "Geschlossen" und speichern Sie den neuen Datensatz.

Sie verbieten besser die "update" Aktion, dann, wenn Sie einen 'offenen' Status-Datensatz wollen, erstellen Sie einfach einen.

Sie können sogar den 'Status' vergessen, verwenden Sie einfach den letzten Datensatz als 'offenen' Status-Datensatz.

Verwandte Themen