2017-04-07 3 views
0

Der folgende Code führt zu einem leeren Wert in der Datenbank und wenn ich es aus der Datenbank bekomme es eine leere Zeichenfolge.Laravel 5.4 Speichern NULL in die Datenbank funktioniert nicht

$customer->update(['company' => NULL]); 
+0

und wollen Sie NULL, wenn Sie es aus db bekommen? – dparoli

+0

@ dparoli ja, das Feld ist optional und es könnte Null sein, so, wenn es Null ist, würde ich gerne Null und keine leere Zeichenfolge, und ein leeres Feld in der Datenbank –

Antwort

5

Sie sollten drei Dinge berücksichtigen:

1) Stellen Sie sicher, company Spalte in nullable in Ihrer Tabelle. Wenn es nicht ist, ist es nicht möglich, null dort zu setzen.

2) Stellen Sie sicher, dass Sie in $fillable Eigenschaft Customer Modellspalt haben company

3) Stellen Sie sicher, Sie haben keinen Mutator in Ihrem Customer Modell - so überprüfen Sie nicht setCompanyAttribute Methode haben, den Wert ändern könnte automatisch zu leeren String, wenn es gesetzt

+0

danke für Ihre Antwort, ich fand den Fehler hatte ein Mutator für die Firma: // –

1

SOLUTION auf null

wenn Sie ein Feld in der Datenbank sein wollen null und Sie nicht über einen Mutator verwenden all Ding ist in Ordnung.

Verwenden Sie einen Mutator, in meinem Fall das folgende Snippet.

public function setCompanyAttribute($value) 
{ 
    $this->attributes['company'] = ucfirst($value); 
} 

Dann müssen Sie prüfen, ob $ Wert null ist und dann manuell auf null gesetzt sonst wird es eine leere Zeichenfolge sein.

Um dies automatisch für jedes Modell zu tun, können Sie die leere Zeichenfolge in Ihrem EventServiceProvider auf null zurücksetzen.

Es ist wichtig, zuerst alle Attribute aus dem Modell zu überprüfen und sie auf ein temporäres Array zu setzen. In der Methode setAttribute() für die Modellinstanz werden die Prüfungen durchgeführt, wenn ein Mutator vorhanden ist. Aber das ist genau das, was Sie nicht wollen, weil es alle Felder mit einem bestimmten Mutator auf einen leeren Stich setzen würde. Verwenden Sie stattdessen setRawAttribute, damit die alten Attribute mit denen aus dem temporären Array überschrieben werden.

Dies ist sicher zu tun, denn wenn der überprüfte Wert keine leere Zeichenfolge ist, wird der bereits vorhandene Wert für dieses Feld verwendet. Andernfalls, wenn es eine leere Zeichenfolge ist, wird null festgelegt.

Hoffe es hilft!

+0

Dies ist ziemlich seltsam zu ändern, akzeptiert zu Ihrem und vorliegenden Code, der nicht in der ursprünglichen Frage –

+0

@ MarcinNabiałek sry vorgestellt wurde ich änderte es zurück. Ich dachte, es wäre hilfreich für den nächsten Leser zu sehen, wie ich es behoben habe. Ihre Antwort listet einige Teile auf, die überprüft werden müssen, aber meins stellt eine mögliche Lösung dar. –

Verwandte Themen