2017-12-11 1 views
1

Wie bekomme ich user_id = null?Laravel Formular nullable user_id

Logic:

Ich habe Zeugnis, wo ich manuell Benutzerinformationen füllen oder einfach nur eine meiner bestehenden Benutzer wählen, das Problem ist, wenn ich versuche, Testimonial mit manuellen Benutzern zu speichern erhalte ich The user id must be a number. Fehler.

hier ist mein Speicher-Methode:

$this->validate($request, array(
    // rest of code 
    'user_id' => 'nullable|numeric', 
)); 

$testimonial = new Testimonial; 

    // rest of code 
    $testimonial->user_id = $request->input('user_id'); 
    // rest of code 

Das ist meine Form ist:

{{ Form::label('user_id', 'User') }} 
<select class="form-control" name="user_id"> 
    <option>Select User</option> 
    @foreach($users as $user) 
    <option value="{{ $user->id }}">{{ $user->username }}</option> 
    @endforeach 
</select> 

Hier mein Schema ist:

Schema::create('testimonials', function (Blueprint $table) { 
    // rest of code 
    $table->integer('user_id')->unsigned()->nullable(); 
}); 
Schema::table('testimonials', function (Blueprint $table) { 
    // rest of code 
    $table->foreign('user_id')->references('id')->on('users'); 
}); 

Wie kann ich auf das akzeptieren null übergeben Feld?

+0

Stellen Sie sicher, dass Ihr 'select' der gleiche Teil des Formulars ist, das Sie senden. – usrNotFound

Antwort

2

Die Fehlermeldung weist auf einen Validierungsfehler und kein Datenbankproblem hin. Ihre Datenbank akzeptiert Nullwerte, da testimonials.user_id nullfähig ist.

Der nächste Schritt im Debugging wäre zu überprüfen, was $request->input('user_id') wirklich ist. Sie müssten die Validierungsregeln vorübergehend deaktivieren, um dies zu erreichen.

dd($request->input('user_id')); 

Sie werden feststellen, dass eine Option ohne Wert ihren Text als Wert verwendet. Sie senden keine leere Zeichenfolge, Sie senden die Zeichenfolge "Select User", die natürlich nicht numerisch ist. Ändern Sie stattdessen Ihren HTML-Code, damit diese Option einen leeren Wert hat.

<option value="">Select User</option> 
+0

danke, dass es jetzt funktioniert – mafortis

0

Änderung

$testimonial->user_id = $request->input('user_id');

zu

$testimonial->user_id = (int) $request->input('user_id'); 
+0

selbe Fehler ..... – mafortis

-1

Da Ihr user_id als foreign key in Zeugnisse Tabelle handelt, sollte es auch in users Tabelle vorhanden sein. Wenn Sie manuell versuchen, den Datensatz einzugeben, weisen Sie ihm wahrscheinlich die ID zu, die in der Benutzertabelle nicht vorhanden ist. Sie können keine foreign key und NULL gleichzeitig haben. Entfernen Sie einfach die Abhängigkeit, und es funktioniert für beide Szenarien einwandfrei.

+0

Wenn ich keinen vorhandenen Benutzer auswähle, lasse ich diese Spalte leer und verbinde nichts '' – mafortis

+0

Dann sollten Sie die 'Fremdschlüssel' Einschränkung – baig772

+0

und wenn für nächste entfernen Eintrag Ich möchte Existenz Benutzer stattdessen manuell verwenden? :) – mafortis