2016-08-26 3 views
0

Ich habe versucht, dieses eine für ziemlich viel herauszufinden und durch jeden Post von hier und Laracast gegangen, um herauszufinden, aber in Ader.Laravel 5.2 Unique Validation immer ungültig auf UPDATE

Ich habe das schon einmal gemacht und es hat funktioniert, aber ich bin mir nicht ganz sicher, warum es jetzt nicht geht.

Im Grunde eine Regel in Ihrem Formular Anfrage einrichten soll unter dem Format folgen:

<?php 

class MyFormRequest extends Request{ 
    public function rules(){ 
     return [ 
     'field' => 'required|unique:table_name:field,' . $this->input('field'); 
     ]; 
    } 
    } 

Dies ist für mich arbeiten, soll im Moment, aber nach meiner Erfahrung nicht. Ich habe versucht, die Regeln zu trennen, indem ich die eingehende Anfrage-Methode überprüfte und Regeln basierend darauf ordnete, ob die Anfrage ein Update oder ein Create ist.

Sollte nicht was ich für diese Anforderung genügen? Was wäre der beste Weg, meine Formularanforderung zu verwenden, aber sicherzustellen, dass ich die Eindeutigkeit von beliebig vielen Tabellenfeldern unabhängig von ihren Datentypen validieren kann, weil ich spüre, dass dies möglicherweise mit der Tatsache zusammenhängt, dass Laravel zu sein scheint ein Aggregat auf dem zu validierenden Feld zu machen, und wenn es keine Ganzzahl ist, wird es beispielsweise weiterhin die Fehlermeldung anzeigen.

Eine andere Möglichkeit, dies zu lösen, ist, wenn ich meine eigene Validierungsmethode für die Felder implementiere, die ich validieren möchte. Wie würde ich das machen?

Antwort

0

Diese Regel funktioniert nur, wenn der Primärschlüssel „table_name“ ist „id“ aber wenn es anders ist, dann haben Sie es als vierten Parameter auf einzigartige Regel zu schreiben, wie folgt:

<?php 
class MyFormRequest extends Request{ 
    public function rules(){ 
    return [ 
     'field' => 'required|unique:table_name:field,' . $this->input('field').','.'primary_key_field'; 
    ]; 
    } 
} 

es Hoffnung dir helfen !!!

+0

Hallo Islam habe ich schon getan, was du oben vorschlagen, aber es gibt mir den Fehler unten: SQLSTATE [42S02]: Basistabelle oder Ansicht nicht gefunden: 1146 Table ‚theonesystem.company_groups: Code‘ existiert nicht (SQL: Wählen Sie count (*) als Aggregat aus 'company_groups: code' wobei' TEST VALUEL' = "TEST VALUE" und 'id' <> id) – Maximum86

+0

Es scheint, dass diese Regel nicht für andere Feldtypen außer für ganze Zahlen funktioniert und Dinge wie das, wo Sie tatsächlich Aggregation tun können.Corrct mich, wenn ich falsch liege – Maximum86

+0

Nein, ich denke nicht. Da das Problem hier mit dem Tabellennamen nicht in der Datenbank gefunden wird, stellen Sie sicher, dass die Tabelle in der gleichen Datenbank ist, die Sie gerade verbinden, testen Sie es, indem Sie alle Daten aus dieser Tabelle in Tinker oder etwas bekommen. –

0

Sie müssen dem Prüfer mitteilen, welche Zeilen von der Dublettensuche ausgeschlossen werden sollen. Wenn Ihr Primärschlüssel id ist, müssen Sie den Wert zu übergeben:

'field' => 'required|unique:table_name,field,' . $this->input('id') 

Ihr Code hat auch einige andere Fehler:

'field' => 'required|unique:table_name:field,' . $this->input('field'); 
            ^       ^
0

Die Regel „einzigartig“ aditional Argumente muss bei der Aktualisierung. Diese zusätzlichen Argumente sind dafür verantwortlich, dass Sie die eigentliche Registrierung ignorieren, an der Sie gerade arbeiten. Wenn sie nicht angewendet wird, wird diese Regel immer ungültig, da die Registrierung immer in der Datenbank gefunden wird.

Ihr drittes Argument sollte die ID sein, die Sie ignorieren möchten. (Sie übergeben einen Wert ...)

* Eine andere Sache: Ich habe einen Fehltyp von Ihrer Regel aufgehoben. Überprüfen Sie unten das richtige sintax mit neuen Argumenten.

'field' => 'required|unique:table_name,field,'.$this->input('id')' 

PS: Wenn Sie Ihre ID-Spalte aus Ihrer Tabelle einen anderen Namen als „id“ hat, müssen Sie diese Spaltennamen als vierten Parameter angeben.

'field' => 'required|unique:table_name,field,'.$this->input('id').',column_name'