J'essaie d'écrire un cas de test dans Laravel. J'ai trouvé here comment créer des données factices pour une relation de plusieurs à plusieurs entre deux modèles. Mais je ne pouvais pas trouver comment ajouter des attributs au tableau croisé dynamique.Laravel Test: Ajouter un attribut au tableau croisé dynamique
Voici un exemple: Nous avons un modèle user
et un modèle car
. Chaque utilisateur peut conduire plusieurs voitures, chaque voiture peut être conduite par plusieurs utilisateurs et nous voulons capturer combien de miles chaque utilisateur a conduit avec chaque voiture.
users
Table
id | name
1 | Bob
2 | Alice
cars
Table
id | name
1 | Red Car
2 | Blue Car
car2user
table de relation
id_user | id_car | miles
1 | 1 | 20
2 | 2 | 4
Comment puis-je créer un tel cas de test? J'ai essayé
$user = factory(\App\User::class)->create(['name' => 'Bob'])->first();
$user->cars()->save(factory(\App\Car::class)->create(['name' => 'Red Car']));
Mais cela soulève l'erreur:
General error: 1364 Field 'miles' doesn't have a default value
J'accepte ce message d'erreur, parce que je ne précise nulle part la valeur pour le champ obligatoire miles
. Mais où puis-je fournir cette valeur?
Oh maintenant je comprends! La méthode save est la même que celle que j'utilise pour mes requêtes Eloquent, parce que je l'appelle sur la relation 'cars()'! Je pensais que la méthode save était quelque chose de spécial avec PHPUnit et tout cet appel était une boîte noire pour moi .. La seule différence est que j'appelle la méthode Eloquent avec un faux modèle. Ceci est vraiment génial! Je vous remercie! – Adam