J'essaie d'enregistrer plusieurs lignes dans une table, cependant, on me présente un Mass Assignment Error
.
L'erreur est: 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();
}
Ma structure de base de données est:
il n'y a donc pas d'orthographe incorrecte. Le critère_id provient de la variable des critères récemment enregistrés (voir le code ci-dessus pour la boucle).
Toute aide serait grandement appréciée.
Pour pouvoir définir des propriétés en les passant au constructeur du modèle, vous devez répertorier toutes les propriétés dont vous avez besoin dans le $fillable
tableau. Comme mentionné dans le Docs
class Bedroom extends Eloquent {
protected $fillable = array('criteria_id', 'bedroom');
}
Vous pouvez également utiliser la méthode create
si vous le souhaitez. Il crée un nouveau modèle et l'enregistre directement:
foreach(Input::get('bedrooms') as $bedroom){
$new_bedroom=array(
'criteria_id' => $criteria->id,
'bedroom' => $bedroom,
);
$bedroom = Bedroom::create($new_bedroom);
}
Le inverse de ce que lukas a dit est "gardé". Au lieu de "liste blanche", vous pouvez simplement déclarer ceux qui sont protégés.
Par exemple:
class Bedroom extends Model
{
protected $guarded = ['id'];
}
C'était plus utile pour moi parce que je ne me souciais pas vraiment de la plupart des domaines.
Obtenu à partir des documents pour Laravel 5.2 mais je suppose que cela fonctionne sur les anciennes versions.
Pour autoriser tous les champs, vous pouvez simplement fournir un tableau vide:
class Bedroom extends Model
{
protected $guarded = [];
}