2014-05-03 13 views
6

Mam formularz z rozwijanym wyborem, który pozwala wybrać klucz obcy dla konkretnego modelu. Górna opcja jest zawsze cośLaravel + zerowe klucze obce

<option value="">please select</option> 

Więc kiedy wypełnić mój model z tym dane z formularza,

$booking = new Booking($data); 

i starają się go uratować,

$booking->save(); 

To zawsze kończy się niepowodzeniem ponieważ to narusza ograniczenie FK, ponieważ Laravel nie jest wystarczająco inteligentny, aby anulować to pole dla mnie. Tak więc wymyśliłem tego małego Hack:

public function save() { 
    if(!$this->vehicle_id) $this->vehicle_id = null; 
    if(!$this->driver_id) $this->driver_id = null; 
    parent::save(); 
} 

Ale to nie ma sposobu, aby powiedzieć laravel które pola reprezentowania FKS i powinien być ustawiony na NULL jeśli liczba całkowita> 0?

+1

http://stackoverflow.com/questions/17452923/empty-string-instead-of-null-values-eloquent –

Odpowiedz

14

Jednym z możliwych rozwiązań jest użycie set mutators dla wszystkich kluczy obcych:

public function setVehicleIdAttribute($value) { 
    $this->attributes['vehicle_id'] = $value ?: null; 
} 

public function setDriverIdAttribute($value) { 
    $this->attributes['driver_id'] = $value ?: null; 
} 
+0

Works wielkie dzięki! –

+1

Świetna odpowiedź na coś, co zabrało mnie na zawsze. Jedna uwaga, która może pomóc: Pamiętaj, aby nazwać mutator identyfikatorem - tzn. Nie mutuje funkcji relacji, ale raczej pole db. Błędem było wywoływanie funkcji "setVehicleAttribute" po funkcji zamiast "setVehicleIdAttribute" na powyższym przykładzie. Laravel wtedy brakowało łapania mutatora. Oczywiste z perspektywy czasu ... ale trwało na zawsze, aby znaleźć. – Watercayman

Powiązane problemy