我在数据库中有一个带有导航栏菜单项的表,这个表与自身有1xN的关系,我正在检索数据(如:\App\Menu::with(['childs'])->get()
):
array(
array(
'id' => 1,
'id_parent' => NULL,
'url' => '/',
'childs' => array ()
),
array(
'id' => 2,
'id_parent' => NULL,
'url' => '/blog',
'childs' => array (
array(
'id' => 3,
'id_parent' => 2,
'url' => 'blog/kitchen',
'childs' => array(
array(
'id' => 4,
'id_parent' => 3,
'url' => 'blog/kitchen/salads',
'childs' => array()
),
array(
'id' => 5,
'id_parent' => 3,
'url' => 'blog/kitchen/soups',
'childs' => array()
),
)
),
)
),
array(
'id' => 3,
'id_parent' => 2,
'url' => '/blog/kitchen',
'childs' => array()
),
array(
'id' => 4,
'id_parent' => 3,
'url' => 'blog/kitchen/salads',
'childs' => array()
),
array(
'id' => 5,
'id_parent' => 3,
'url' => 'blog/kitchen/soups',
'childs' => array()
),
);
我需要什么:
array(
array(
'id' => 1,
'id_parent' => NULL,
'url' => '/',
'childs' => array ()
),
array(
'id' => 2,
'id_parent' => NULL,
'url' => '/blog',
'childs' => array (
array(
'id' => 3,
'id_parent' => 2,
'url' => 'blog/kitchen',
'childs' => array(
array(
'id' => 4,
'id_parent' => 3,
'url' => 'blog/kitchen/salads',
'childs' => array()
),
array(
'id' => 5,
'id_parent' => 3,
'url' => 'blog/kitchen/soups',
'childs' => array()
),
)
),
)
),
);
如果有更简单的方法,比如; SELECT
直接在数据库中它会很棒,如果没有,只需用PHP从外层删除内部项即可。
答案 0 :(得分:1)
您应该尝试以下查询。
\App\Menu::where('id_parent', '=', null)->with(['childs'])->get();
答案 1 :(得分:0)
如果他过滤掉/
parent_id
网址
以下是仅使用PHP
的解决方案示例// an empty array
$arr = array();
// data you import from the database
$array = \App\Menu::where('id_parent', '=', null)
->with(['childs'])->toArray();
// populate the empty array
$arr[] = array_shift($array);
$arr[] = array_shift($array);
$array
变量包含最后3个不需要的事件,而$arr
变量包含您想要的值。
但我不是建议你,因为你可以用另一种方式使用Collections
答案 2 :(得分:0)
使用这一次.......我认为这会对你有帮助
\App\Menu::where('id_parent', '=', null)->with(['childs'])->get();