2014-07-09 6 views
0

J'ai une webapp, faite dans Laravel 4, où les utilisateurs créent et votent sur les sondages. Ce sont les migrations (simplifié):M: N relations sur Laravel 4

migration pour les sondages:

public function up() { 
    Schema::create('polls', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('topic'); 
     $table->timestamps(); 
    }); 
} 

migration pour les utilisateurs:

public function up() { 
    Schema::create('users', function(Blueprint $table) { 
     $table->increments('id'); 
     $table->string('email'); 
     $table->string('password'); 
     $table->timestamps(); 
    }); 
} 

maintenant:

Je veux garder une trace quand les utilisateurs votent sur un sondage (ils ne peuvent donc plus voter). Je suppose que je devrais faire une sorte de table M: ​​N. Un peu comme ceci:

| User ID | Poll ID | 
|---------|-----------| 
|  1 |   5 | 
|  1 |   7 | 
|  1 |   8 | 
|  3 |   5 | 
|  ... |  ... | 

Mais Laravel utilise Eloquent ORM, et j'ai lu il y a des fonctions comme belongsToMany ou hasMany. Donc, je me demandais:

Y a-t-il une manière conventionnelle ou "intelligente" de mettre en place ce genre de "tables de relation" pour simplifier le développement et la maintenance?

Répondre

2

Oui, vous avez besoin de 3 tables pour obtenir une relation de plusieurs à plusieurs. les fonctions belongsToMany disent juste éloquent comment faire la récupération des données. Si vous utilisez le package jeffrey way's laravel generator, vous pouvez simplement utiliser la commande suivante pour la création de la table de liaison.

php artisan generate:pivot polls users 

puis dans vos modèles en conséquence ajouter

// poll model 
public function users() 
{ 
    return $this->belongsToMany('User'); 
} 

// user model 
public function poll() 
{ 
    return $this->belongsToMany('Poll'); 
} 
+0

Ceci est tout à fait :) dur à cuire est-il un moyen d'auto-alimenter le M: ​​table de N? ou dois-je le faire manuellement? –

+1

Je le ferais avec [seeds] (http://laravel.com/docs/migrations#database-seeding) et je les ajouterais comme bon vous semble (par exemple '$ poll-> users() -> saveMany ($ users) 'etc. il y a plusieurs possibilités) – zwacky

+0

Je pensais que l'ensemencement consistait à donner des valeurs initiales à la base de données. Je ne suis pas sûr de ce que cela a à voir avec ce problème. –

Questions connexes