2014-11-03 17 views
11

Sto tentando di salvare più righe su una tabella, tuttavia, mi viene presentato un Mass Assignment Error.Laravel - Errore di assegnazione dell'assenza di massa

L'errore è: Illuminate \ Database \ Eloquent \ MassAssignmentException criteria_id

$criteria->save(); 

    $criteria_id = $criteria->id; 

    foreach(Input::get('bedrooms') as $bedroom){ 
     $new_bedroom=array(
      'criteria_id' => $criteria->id, 
      'bedroom' => $bedroom, 
      ); 
     $bedroom = new Bedroom($new_bedroom); 
     $bedroom->save(); 
    } 

La mia struttura del database è:

screenshot

quindi non c'è alcun ortografia errata. Il criterio_id deriva dalla variabile dei criteri salvati di recente (vedi codice sopra forloop).

Qualsiasi aiuto sarebbe molto apprezzato.

+1

È il 'criteria_id' nel $ fillable' serie' del modello? – lukasgeiter

+0

@lukasgeiter, no non lo è. L'array è vuoto. Devo accedere alla variabile più avanti nel codice che funziona perfettamente bene, che è anche all'interno di un ciclo 'foreach'. - '-> attach ($ criteria_id)'. – Ben

risposta

33

Per poter impostare le proprietà passandole al costruttore del modello, è necessario elencare tutte le proprietà necessarie nell'array $fillable. Come accennato nella Docs

class Bedroom extends Eloquent { 
    protected $fillable = array('criteria_id', 'bedroom'); 
} 

Inoltre è possibile utilizzare il metodo create se si desidera. Esso crea un nuovo modello e lo salva direttamente:

foreach(Input::get('bedrooms') as $bedroom){ 
    $new_bedroom=array(
     'criteria_id' => $criteria->id, 
     'bedroom' => $bedroom, 
     ); 
    $bedroom = Bedroom::create($new_bedroom); 
} 
+0

mai conosciuto eloquente come rubino su rotaie 'attr_accessible' –

9

Il inversa di ciò che Lukas ha detto è "sorvegliato". Invece dei campi "white-listing", puoi semplicemente dichiarare quali sono protetti.

Ad esempio:

class Bedroom extends Model 
{ 
    protected $guarded = ['id']; 
} 

Questo è stato più utile per me, perché non ho veramente a cuore la maggior parte dei campi.

Ottenuto dai documenti per Laravel 5.2 ma presumo che funzioni su versioni precedenti.

Per consentire tutti i campi, si può solo fornire un array vuoto:

class Bedroom extends Model 
{ 
    protected $guarded = []; 
} 
Problemi correlati