0

データベースからメニューをロードするプロジェクトがあります。アーキテクチャは、最初に上部の水平メニュー (管理、設定、レポート) 用のモジュールがあり、次に左側のサイドバーの垂直メニュー見出し (ユーザー、ブック) 用のサブモジュールがあり、最後のモジュールはサブメニュー (ユーザー管理、パスワード) をクリックすると展開されるノードです。リセット、ブック マスター、ブック リスト)。

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

このように、ノードは一度だけ来て、モジュールとサブモジュールが繰り返されます。

menu_modules、menu_sub_modules、module_submodule_mapping、menu_nodes、および submodule_node_mapping の 5 つのテーブルがあります。

'menu_module フィールド' - menu_module_id、module_name、created_at、updated_at

「menu_sub_modules」フィールド - menu_sub_module_id、sub_module_name、created_at、updated_at

「module_submodule_mapping」フィールド - sub_module_mapping_id、menu_module_id、menu_sub_module_id、created_at、updated_at

「menu_nodes」フィールド - menu_node_id、node_name、created_at、updated_at

'submodule_node_mapping' - node_mapping_id、menu_sub_module_id、menu_node_id、created_at、updated_at

まず、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

次に、次のクエリのような 2 番目の結果:

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' 

モデルの構造と方法、および結果を表示する方法を誰でも説明できますか。menu_node_id のような独自の id フィールドを使用しており、プロジェクトは laravel 4 にあることに注意してください。

4

1 に答える 1

1

私はあなたがしようとしていることで、テーブルで結合を実行する方法があるため、クエリビルダーを使用すると混乱する時間が少なくなると思います. これには、テーブル構造を少し再構築する必要がありますが、最終的には理解しやすくなります。

menu_modules

  1. ID
  2. 名前
  3. created_at
  4. updated_at

menu_sub_modules

  1. ID
  2. 名前
  3. menu_id (これは menu_modules への外部キーになります)
  4. created_at
  5. updated_at

menu_nodes

  1. ID
  2. 名前
  3. sub_id (これは menu_sub_modules への外部キーになります)
  4. created_at
  5. updated_at

これらの外部キーが配置されたので、クエリ ビルダーを使用できるようになり、追加のピボット テーブルについて心配する必要がなくなりました。

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();
于 2013-04-26T19:50:09.700 に答える