2014-11-03 9 views
11

Ich versuche, mehrere Zeilen in einer Tabelle zu speichern, aber ich bin mit einem Mass Assignment Error vorgestellt.Laravel - Mass Assignment Exception Fehler

Der Fehler ist: 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(); 
    } 

Meine Datenbank-Struktur ist:

screenshot

so es keine falsche Schreibweise ist. Die criteria_id stammt von der Variablen aus den zuletzt gespeicherten Kriterien (siehe obigen Code forloop).

Jede Hilfe würde sehr geschätzt werden.

+1

Ist 'criteria_id' im' $ fillable' Array des Modells? – lukasgeiter

+0

@lukasgeiter, nein ist es nicht. Das Array ist leer. Ich muss später auf die Variable im Code zugreifen, der vollkommen in Ordnung ist, das ist auch in einer "foreach" -Schleife. - '-> anhängen ($ criteria_id)'. – Ben

Antwort

33

Um Eigenschaften festlegen zu können, indem Sie sie an den Konstruktor des Modells übergeben, müssen Sie alle erforderlichen Eigenschaften im Array $fillable auflisten. Wie in der

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

Auch können Sie die create Methode verwenden, wenn Sie wollen. Es schafft ein neues Modell und speichert sie direkt:

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

kannte nie eloquent gerade wie Rubin auf Schienen 'attr_accessible' –

9

Die inverse von dem, was gesagt wird, LUKAS „bewacht“. Anstelle von "White-Listing" -Feldern können Sie einfach angeben, welche geschützt werden.

Zum Beispiel:

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

Das war mehr nützlich für mich, weil ich nicht wirklich über den meisten Bereichen hat sich interessieren.

Gotten aus der Dokumentation für Laravel 5.2, aber ich nehme an, es funktioniert auf älteren Versionen.

Damit alle Felder, können Sie nur ein leeres Array bieten:

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