2016-09-27 44 views
0

私はメニューと呼ばれるテーブルを持っています。私はその子メニューでメニューを取得したいですが、親メニューだけが検索されています。子メニューの結果は空の配列です。 私のテーブル構造は:id | parent_id |名。 多くの関係マイメニューモデル1は、次のとおりです。私はダンプsub_menusのDD($ sub_menus)を潜るとき、それは空の配列をLaravel 5の1対1リレーションシップを同じテーブルに作成するにはどうすればよいですか?

public function childMenus() { 
return $this->hasMany(‘App\Menu’, ’parent_id’); 
} 

public function parentMenus() { 
return $this->belongsTo(‘App\Menu’, ‘parent_id’); 
} 
My controller Method: 
public function index() 
{ 
$menu = new Menu; 
$parent_menus = $menu->where('parent_id', NULL)->get(); 
$sub_menus = $menu->childMenus()->get(); 
return View('admin',compact('$parent_menus’, ‘sub_menus’); 
} 

返します。 誰か助けてください。ありがとうございます。

答えて

0

あなたはすでにあなたの中に存在する親メニューのchidlMenusを取得する必要がありながら、関連するすべての子メニューを持っていません$メニュー変数に格納され、新しく作成されたメニューオブジェクトのchildMenus関係を取得していますデータベース。

その子メニューを親メニューをロードするための最も簡単な方法は、以下の(予告新しいメニューオブジェクトを作成する必要はありません)を行うことです:の

$parent_menus = Menu::with('childMenus')->where('parent_id', NULL)->get(); 

$ parent_menusます今ストアcollectonすべての親メニューとそれぞれの子メニューはchildMenusという変数に格納されます。あなたが親と子メニューを反復することができます:あなたが望むすべては関係なく、彼らが持っているもの、親の、すべての子メニューの単なる集合体である場合

foreach ($parent_menus as $parent) { 
    foreach ($parent->childMenus as $child) { 
    //do whatever you need with the child menu 
    } 
} 

、単に実行します。あなたの答えのための

$child_menus = Menu::whereNotNull('parent_id')->get(); 
+0

感謝を。実際には、私のDBには、子メニューを持つ親メニューがあります。私がdd($ parent_menus);結果を返しますが、子メニューの場合でも空の結果が得られます。 –

+0

これは、子メニューを間違って読み込むためです。上の例のような親メニューオブジェクトを使ってそれらにアクセスする必要があります。ただ1つの変数にすべての子メニューを追加したい場合は、更新された答え –

+0

を参照してください。助けてくれてありがとう。実際には親オブジェクトを通して子メニューを取得していませんでしたもう一度やり直してください。 –

関連する問題