У меня есть таблица в базе данных с элементами меню навигационной панели, эта таблица имеет отношение 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.






Вы должны попробовать ниже запрос.
\App\Menu::where('id_parent', '=', null)->with(['childs'])->get();
он удалит URL-адрес /, если он отфильтрует нулевой 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 содержит желаемые значения.
Но я не предлагаю вам этого, потому что вы можете сделать это с помощью другой путь, используя Коллекции
используйте это один раз ....... я думаю, это поможет вам
\App\Menu::where('id_parent', '=', null)->with(['childs'])->get();
Привет, Локеш, спасибо за ответ! Не могли бы вы рассказать немного больше о своем коде и почему он работает?