Laravel relations dans les migrations?
Je sais que vous pouvez définir des relations de table assez facile avec $this->belongs_to()
, $this->has_many()
etc, mais ce que je ne comprends pas, c'est comment la relation de la création de la table; la table qui lie les deux tables ensemble (j'ai oublié ce que le terme est appelé).
Disons que je suis de la création d'une table des utilisateurs. Je veux que l'utilisateur appartenir à un certain "Rôle". Il y a des rôles multiples, et chaque rôle peut avoir plusieurs utilisateurs. Je vais aussi avoir besoin de créer un roles
table pour que. Pour l'instant, donc bon.
Mais après la lecture de la documentation, il dit que je devrais ajouter le $this->belongs_to()
dans le modèle, la migration elle-même. Quand et comment est la relation entre la table créée? Si je crée le roles
et users
tables et ajouter $this->belongs_to('roles')
à la users
modèle, et $this->has_many('users')
à la roles
modèle, la table du milieu sera créé automatiquement?
OriginalL'auteur qwerty | 2012-11-24
Vous devez vous connecter pour publier un commentaire.
Autant que je sache, pas de relation de table sera créée. Ce que vous devez faire est d'avoir un
role_id
sur votreusers
table, de sorte que lorsque vous créez un utilisateur, l'ID de rôle va y être stockées. Cela vous permettra de vous faire une sélection de tous les utilisateurs, oùrole_id == '1'
ou quoi que ce peut être.Par exemple:
Où sur le
ROLES
table de l'enregistrement avecID='1'
est admin.Donc encore une fois pour répondre à votre question, pas de relation de table est créée, au lieu de la relation qui existe au sein de votre deux tables sous la forme d'un
role_id
colonne pour chaque utilisateur. D'intérêt, êtes-vous à l'aide de clés étrangères?Si vous voulez avoir une table relations vous pouvez créer un appelé
user_roles
ou quelque chose et de stocker lesrole_id
etuser_id
là, cependant je pense qu'il est plus facile d'utiliser la méthode ci-dessus, alors vous pouvez utiliser tous les Laravel/Éloquent bonté.Espère que cela aide 🙂
Donc, ce qui est mieux, que ce soit pour créer des relations sur la base de données elle-même en modifiant les fichiers de migration ou tout simplement à définir des liens dans les fichiers de modèle? ou en utilisant les deux techniques
OriginalL'auteur gregchapple
Lors de la création d'une migration, vous pouvez spécifier les clés étrangères des tables
c'est à dire
Cela va créer une clé étrangère sur la colonne user_id sur le tableau des rôles.
Les avantages de clés étrangères, c'est que lorsqu'une mise à jour ou suppression est effectuée la clé étrangère de la table sera automatiquement mis à jour ou "en cascade" de la grande description trouvé ici
Comme décrit sur le Laravel de la documentation, vous pouvez aussi spécifier votre en cascade sur la mise à jour à l'aide de la syntaxe suivante
Je voudrais faire un mauvais travail d'essayer d'expliquer mieux que la documentation n'donc s'il vous plaît lire la "Les relations" section de l'Éloquent ORM de la documentation pour voir comment son fait.
exemple ici: easylaravelbook.com/blog/...
Mise à jour de réponse pour afficher plus détaillée de la migration exemple
OriginalL'auteur Roark
Il ressemble à quelques questions que vous n'avez pas répondu, c'est à dire "Quand et comment est la relation entre la table créée" & "la table du milieu sera créé automatiquement":
Autant que je suis conscient, ces tables doivent être créées manuellement. Afin de créer le fichier de migration de la sorte:
Laravel 5
Laravel 4
Noter que les noms sont au singulier, et sont présentés dans l'ordre alphabétique.
Puis dans la migration quelque chose comme:
Espère que ça aide. Je ne suis pas sûr si les horodateurs sont nécessaires dans les Tableaux croisés dynamiques ou non, donc merci de l'expérimentation.
migrate:make
n'est pas artisan pour Laravel 5.4, il estphp artisan make:migration
OriginalL'auteur Mere Development
Bien que son un ancien Post, je pensais que je peux apporter quelque chose mis à jour. Pour Laravel5, Jeffrey Façon a développé un package Laravel5 Générateurs étendu qui améliorent le générateur capacité de
php artisan
pourmake:migration:schema
make:migration:pivot
make:seed
Pour plusieurs-à-plusieurs relation entre les utilisateurs et le rôle que vous pouvez simplement utiliser
et il va générer la nécessaire migration de la classe. Vous n'avez pas besoin de code manuellement pour cela.
OriginalL'auteur Ariful Haque
Cette vidéo m'a aidé.
https://laracasts.com/series/laravel-5-fundamentals/episodes/14
Ce qui était surprenant pour moi a été que d'un seul côté de la relation doit pointer_id dans le tableau de migration, pas les deux. Par exemple, si nous avons l'Auteur de nombreux Articles, nous ajoutons seulement
à l'article de la migration et thats it.
OriginalL'auteur pera
Je sais que c'est un vieux post, mais comme j'ai eu la même question en tête. J'ai trouvé la solution dans le Laravel manuel (5.0) où il est indiqué que pour ce type plusieurs-à-plusieurs relations vous pouvez créer la table manuellement et ensuite déclarer le type de relation dans le Modèle de cette façon:
ou si vous voulez utiliser des clés associées:
Espère que cela peut vous aider.
OriginalL'auteur Lino