2013-04-26 1 views
0

J'ai un projet qui charge les menus à partir de la base de données. L'architecture est d'abord J'ai Modules pour les menus horizontaux supérieurs (Admin, Paramètres, Rapports) puis Sous Modules pour les en-têtes de menu vertical gauche (Utilisateurs, Livres) et le dernier est Node qui est développé en cliquant sur le sous-menu (User Management, Mot de passe Réinitialiser, Livre Maître, Listes de livres).Relation de table de mappage éloquente à l'aide de cinq modèles dans laravel 4

 Admin > Users > User Management 
     Admin > Books > Book Master 
     Settings > Users > Password Reset 
     Reports > Books > Book Lists 

Comme cela, le nœud ne viendra qu'une seule fois et les modules et sous-modules seront répétés.

Il y a cinq tables: menu_modules, menu_sub_modules, module_submodule_mapping, menu_nodes et submodule_node_mapping.

'champs menu_module' - menu_module_id, module_name, created_at, updated_at

champs 'menu_sub_modules de - menu_sub_module_id, sub_module_name, created_at, updated_at

'module_submodule_mapping' champs - sub_module_mapping_id, menu_module_id, menu_sub_module_id, created_at, updated_at

champs 'menu_nodes de - menu_node_id, nom_noeud, created_at, updated_at

'submodule_node_mapping' - node_mapping_id , Menu_sub_module_id, menu_node_id, created_at, updated_at

D'abord, je dois obtenir des résultats comme cette requête en utilisant la relation éloquente Laravel 4:

SELECT A.module_name,B.sub_module_name FROM menu_module A,menu_sub_modules B,module_submodule_mapping C WHERE A.menu_module_id = C.menu_module_id AND B.menu_sub_module_id = C.menu_sub_module_id 

Ensuite, le deuxième résultat comme cette requête:

SELECT A.node_name FROM menu_nodes A,submodule_node_mapping B WHERE A.menu_node_id = B.menu_node_id AND C.menu_sub_module_id = '1' 

Quelqu'un peut-il expliquer la structure et les méthodes du modèle et comment obtenir le résultat? S'il vous plaît noter que j'utilise mes propres champs id comme menu_node_id et le projet est en laravel 4.

Répondre

1

Je crois avec ce que vous cherchez à faire, vous aurez moins de confusion en utilisant le constructeur de requête car il a des méthodes pour effectuer des jointures sur les tables. Cela nécessitera un peu de reconstruction de vos structures de table, mais cela devrait être plus facile à comprendre à la fin.

menu_modules

  1. id
  2. Nom
  3. created_at
  4. updated_at

menu_sub_modules

  1. id
  2. Nom
  3. menu_id (cela va être une clé étrangère à menu_modules)
  4. created_at
  5. updated_at

menu_nodes

  1. id
  2. Nom
  3. SUB_ID (Cela va être une clé étrangère pour les hommes u_sub_modules)
  4. created_at
  5. updated_at

Maintenant, avec ces clés étrangères en place, nous pouvons utiliser le générateur de requêtes et ne pas avoir à vous soucier des tableaux croisés dynamiques supplémentaires.

DB::table('menu_modules') 
->JOIN('menu_sub_modules', 'menu_sub_modules.menu_id', '=', 'menu_modules.id') 
->JOIN('menu_nodes', 'menu_nodes.sub_id', '=', 'menu_sub_modules.id') 
->get(); 
+0

Merci. Ça marche – devo

Questions connexes