cakephup isUnique für 2 Felder?

7

Ich habe ein Registrierungsformular, in dem Benutzer zwei E-Mail-Adressen eingeben können (email1 & amp; email2). Die Anforderung des Marketings ist, dass sie einzigartig sein müssen (einzigartig wie wenn wir 10 Benutzer hätten, dann gäbe es 10 * 2 = 20 eindeutige E-Mail-Adressen).

Das System ist bereits auf CakePHP aufgebaut, also möchte ich wissen, dass es etwas Ähnliches wie das isUnique-Feature (einzigartig in einem Feld) gibt, das dies direkt aus der Box tun kann? Oder bin ich dazu verdammt, das selbst zu programmieren? Vielen Dank im Voraus.

EDIT: Aufbauend auf Richards Beispiel funktionierte das für mich:

%Vor%     
jodeci 17.03.2010, 09:59
quelle

6 Antworten

12

Ich habe eine Lösung in der CakePHP Google-Gruppe gepostet:

Ссылка

Fügen Sie Ihrem AppModel Folgendes hinzu:

%Vor%

und wird in Ihrem Modell verwendet validate:

%Vor%     
RichardAtHome 17.03.2010, 16:55
quelle
11

checkUnique könnte einfach als Wrapper für isUnique geschrieben werden.

%Vor%

und wird in Ihrem Modell verwendet validate:

%Vor%     
Kristof Neirynck 31.03.2013 16:57
quelle
2

Aus der cakePHP 2.0-Dokumentation:

Sie können überprüfen, dass eine Reihe von Feldern eindeutig ist, indem Sie mehrere Felder angeben und $ oder false setzen:

%Vor%

Achten Sie darauf, das ursprüngliche Feld in die Liste der Felder aufzunehmen, wenn Sie eine eindeutige Regel für mehrere Felder erstellen.

Wenn ein aufgelistetes Feld nicht in den Modelldaten enthalten ist, wird es als Nullwert behandelt. Sie können die aufgeführten Felder nach Bedarf markieren.

    
Salim Hamidi 14.09.2015 15:41
quelle
-1

Ja und nein.

Ja, Sie müssen es selbst programmieren, aber innerhalb der CakePHP-Validierungskomponente.

Die Validierungskomponente verfügt über einen Mechanismus, der benutzerdefinierte Validierungsregeln zulässt. Im Wesentlichen setzen Sie einen Funktionsnamen in $ validate (wie Sie es normalerweise tun würden). Sie müssen die Funktion definieren; In diesem Fall ist es ziemlich einfach (erzwinge einfach deine doppelte isUnique-Anforderung).

Ссылка

    
Travis Leleu 17.03.2010 15:07
quelle
-1

Auf die Gefahr hin, über Kopf und Schultern geschlagen zu werden, wenn Sie eine non-CakePHP Lösung anbieten, lassen Sie mich Folgendes vorstellen.

Erstellen Sie einen eindeutigen Index in Ihrer Datenbank über beliebig viele Spalten.

Die Standard-SQL-Syntax dafür lautet:

%Vor%

Platzieren Sie Ihren "$ this- & gt; Model- & gt; save ()" Befehl innerhalb eines "try / catch" Blocks. Testen Sie im Block "catch" die Ausnahme für den Fehlercode. In MySQL ist eine eindeutige Schlüsselverletzung der Fehlercode 23000, aber Sie sollten auch auf andere mögliche Fehler vorbereitet sein.

Es ist schnell und einfach und beinhaltet nicht das Zählen von Array-Klammern.

Sie sollten immer den Datenbankzugriffscode trotzdem in einen "try / catch" -Block stellen. Ein Teil Ihrer Ausnahmebehandlung sollte die Protokollierung unerwarteter Fehlermeldungen umfassen. Du kannst nicht erwarten, dass CakePHP alles für dich macht.

    
UncaAlby 17.04.2015 15:08
quelle
-2

Soweit ich mich erinnere, müssen Sie diese Art der Durchsetzung mit der Methode beforeSave im Modell durchführen. Ich hatte eine Anforderung, dass ein Objekt mindestens eines von N fks gesetzt hat, und ich konnte es nur so machen.

Bearbeiten: Probieren Sie diesen Thread aus, um zu sehen, ob da etwas Ihr Problem löst.

>     
Adriano Varoli Piazza 17.03.2010 12:21
quelle