Je veux pouvoir enregistrer de nombreuses lignes d'affilée dans une table, j'ai lu que cela peut être fait en utilisant la méthode create
, mais j'obtiens cette erreur en essayant d'utiliser le méthode
SQLSTATE [HY000]: Erreur générale: 1364 Le champ 'nom' n'a pas de valeur par défaut (SQL: insérer dans
person_roles
(updated_at
,created_at
) valeurs (2019-01-30 07:46:19, 2019-01-30 07:46:19))
mon code
protected $fillable = ['name'];
J'utilise Laravel v5.7.21
Mis à jour, dans mon PersonRole j'ai ajouté cette ligne p>
$data = [ ['name' => 'actor'], ['name' => 'translator'], ['name' => 'director'], ['name' => 'stageDirector'], ['name' => 'costume'], ['name' => 'musical'], ['name' => 'supportDirector'], ['name' => 'photographer'], ['name' => 'choreographer'], ]; $personRoles = PersonRole::create($data);
pour que l'attribution en masse fonctionne, mais j'obtiens toujours l'erreur.
3 Réponses :
MISE À JOUR:
dans votre cas
public function createManyRecord(array $records){ foreach ($records as $record) { $this->create($record); } return $this; }
ou
$now = Carbon::now()->toDateTimeString(); PersonRole::insert([ ['name'=>'Foo', 'created_at'=>$now, 'updated_at'=>$now], ['name'=>'Bar', 'created_at'=>$now, 'updated_at'=>$now], ['name'=>'Baz', 'created_at'=>$now, 'updated_at'=>$now], .................................. ]);
ou créer une fonction dans la classe de modèle et l'appeler
foreach($data as $datas){PersonRole::create(['name'=>$datas->name])}
mais la fonction createMany
est quand il y a une relation, comme dans votre démo, il y a une relation entre la publication et les commentaires, mais je n'ai aucune relation, donc je ne pense pas que ce soit la bonne et travailler choisir !?
createMany
ne fonctionnera pas s'il n'y a pas de relation, comme dans mon cas
dans votre cas PersonRole :: createMany ($ data);
cela me donne une erreur Appel à la méthode non définie App \ PersonRole :: createMany ()
La seule façon d'utiliser foreach dans les données ou de faire foreach dans les fonctions de modèle
Vous devez utiliser la méthode insert ()
, mais lorsque vous utilisez la méthode d'insertion, vous devez insérer manuellement les colonnes created_at
et updated_at
< pré> XXX
Cette solution ajoutera Null aux colonnes created_at et updated_at!
Vous devez utiliser insert
au lieu de create-
$personRoles = PersonRole::insert($data);
Essayez-vous de foreach vos données et de créer avec chaque donnée?
oui, cela fonctionnera avec un foreach, mais je pense qu'il existe un moyen d'utiliser Eloquent pour les créer tous à la fois ... je ne suis pas sûr, c'est pourquoi je veux demander ici.
Avez-vous ajouté "nom" dans la propriété à remplir du modèle?
Vous pouvez l'ajouter comme ceci - protected $ fillable = ['name'];
oui je l'ai fait en fait
Pouvez-vous essayer avec un seul enregistrement, que cela fonctionne ou non? comme data = ['name' => 'dummy'] puis enregistrez-le.
foreach ($ data as $ datas) {PersonRole :: create (['name' => $ datas-> name])}? Quelque chose comme ca? Vous pouvez supprimer le nom de votre tableau $ data, faites-le simplement $ data = ['acteur', 'traducteur', ....] fera l'affaire.