2016-07-07 12 views
0

Sorry, wenn diese Frage an anderer Stelle gefragt wird, aber ich habe überall gesucht, konnte aber die Antwort nicht finden. Nun, ich bin mit diesem Problem konfrontiert auf Laravel 5.0, wenn ich versuche, eine Variable aus einer Anfrage zu bekommen, Im null Wert auf Production Server bekommen aber im immer eine leeren Zeichenkette auf dem Development Server. Der Wert ist in der Anfrage nicht vorhanden, dh das Feld war leer, als das Formular abgeschickt wurde. z.B.laravel Abfrageanforderung Eingabe gibt null

// ProductController 
public function store(Request $request) { 
    // this field is actually empty in the submitted form 
    $price = $request->price; 
    // when it gets to the server this is how this value looks like : 
    // $price in production server : null 
    // $price in development server : '' 
} 

Wenn ich versuche, das Objekt in eine Datenbank wie

Product::save($request->only('name', 'price')); 

ich diesen Fehler zu speichern (nur auf Produktionsserver)

SQLSTATE [23000]: Integrität Einschränkungsverletzung: 1048 Spalte 'Preis' kann nicht null sein

HINWEIS, dass die Preisspalte 'Standard 0' auf Mysql Tabelle hat

Warum passiert das?

UPDATE:

Während dieser ganzen Zeit i die Anfrage- dachte> input() -Methode leere Zeichenfolge ('') zurückgeführt, wenn das Feld nicht vorhanden war. aber nur weiß, dass ich an der Laravel Quelle sah dies zu sehen:

public function input($key = null, $default = null) 
{ 
    $input = $this->getInputSource()->all() + $this->query->all(); 

    return array_get($input, $key, $default); 
} 

hier es gibt null zurück, als Standardwert. Warum bekomme ich dann einen leeren String auf dem Entwicklungsserver?

Antwort

2

Dies geschieht, weil mysql den Standardwert einfügt, wenn Sie nichts definieren. In diesem Fall sendet Laravel einen Wert, der null ist. Sie sollten nicht Request::only verwenden, stattdessen ein Array verwenden.

Es ist immer gut, spezifisch zu sein, es macht Ihren Code lesbar und konsistent.

+0

Ich habe $ Anfrage- versucht,> nur(), aber es gibt auch null.Ist das überhaupt mit verschiedenen PHP-Versionen verbunden? – bazi

+0

Ich sage, dass Sie * nicht * Anfrage verwenden sollten-> nur –

+0

okay. aber wenn ich ein Array wie $ data = ['name' => $ request-> name, 'price' => $ request-> price]; , $ data ['price'] ist immer noch null. das löst auch mein Problem nicht. – bazi

1

Eingang Trimmen & Normalisierungs

enthält standardmäßig Laravel die TrimStrings und ConvertEmptyStringsToNull Middleware in globalen Middleware-Stack Ihrer Anwendung. Diese Middleware ist im Stack nach der Klasse App\Http\Kernel aufgelistet. Diese Middleware wird alle eingehenden Zeichenfolgenfelder für die Anforderung automatisch zuschneiden sowie alle leeren Zeichenfolgenfelder in null konvertieren. Auf diese Weise können Sie sich nicht um diese Normalisierungsbedenken in Ihren Routen und Controllern kümmern.

Wenn Sie dieses Verhalten deaktivieren möchten, können Sie die zwei Middleware aus dem Middlewarestack Ihrer Anwendung entfernen, indem Sie sie aus der $middleware-Eigenschaft Ihrer App\Http\Kernel-Klasse entfernen.

Von: https://laravel.com/docs/5.4/requests#input-trimming-and-normalization