Eloquent und NULL - Felder in der Datenbank

hmmmm

New Member
Ich hab das Problem, in meiner Mysql-Datenbanktabelle ist ein Feld car_id das NULLable ist:
Code:
car_id integer unsigned NULL

Und das Ding darf nur entweder NULL enthalten (=kein Inhalt = kein Auto) oder die gültige Id eines Autos.

In meiner Form hab ich das Feld drin und beim ganz normalen einfügen wird mein leeres Feld plötzlich statt mit NULL mit einem '' befüllt?

Ich habs debugged, das Feld ist korrekt leer aber create() legt sie das Datenbankfeld mit '' an statt mit NULL.
Code:
public function store(CarRequest $request)
{
        $input = $request->all();
        // hier ist $input['car_id'] immer noch empty!
        Car::create($input); 
}
Später führt das dann klarerweise zu Fehlern!

Also wie bring ich das NULL in das Feld so wie es sich gehört????????!
 

Franky

New Member
Du kannst Saving() vom Modell benutzt - dann einfach alle Spalten durchgehen und auf null setzen:
Code:
Meinmodell::saving(function($model)
{
   foreach ($model->toArray() as $name => $value) 
  {
    if (empty($value)) 
    {
      $model->{$name} = null;
    }
  }
  return true;
}

Noch schöner wär natürlich dass du dir gleich ein Basismodell baust und davon alle Modell ableitest!
 

Stormy

New Member
Ich würde das ganz anders machen. Nimm einen Mutator:
http://laravel.com/docs/5.0/eloquent#accessors-and-mutators

Das sieht dann so aus im Modell:
Code:
public function setMeinfeldAttribute($wert)
{
    $this->attributes['mein_feld'] = $wert ?: null;
}

Ist zwar ein wenig aufwändig weil das pro Attribut gemacht werden muss, ist aber der richtige Weg.


Ist aber eigentlich ne Riesenschwäche von Laravel. Dieses Defaultverhalten finde ich saudumm.
 
Zuletzt bearbeitet von einem Moderator:
Oben