как мне вывести свою структуру в таком же виде как на картинке, если моя структура под цифрой 1 и моя структура вниз идет на 6 уровней
Это достаточно просто делается.
С точки зрения хранения элементов дерева в базе достаточно добавить поле parent_id (или похожее по смыслу) в таблицу элементов дерева
--
-- Структура таблицы `tree_elements`
--
CREATE TABLE `tree_elements` (
`id` int(10) UNSIGNED NOT NULL,
`parent_id` int(10) UNSIGNED DEFAULT NULL,
`title` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`options` json DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Индексы таблицы `tree_elements`
--
ALTER TABLE `tree_elements`
ADD PRIMARY KEY (`id`),
ADD KEY `tree_elements_parent_id_foreign` (`parent_id`);
--
-- AUTO_INCREMENT для таблицы `tree_elements`
--
ALTER TABLE `tree_elements`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
--
-- Ограничения внешнего ключа таблицы `tree_elements`
--
ALTER TABLE `tree_elements`
ADD CONSTRAINT `tree_elements_parent_id_foreign` FOREIGN KEY (`parent_id`) REFERENCES `tree_elements` (`id`) ON DELETE CASCADE;
COMMIT;
Это только структура таблицы, но чтобы вывести структуру, нужно получить эелемент по id, а потом рекурсивно получать элементы, по нужному parent_id.
Например, получаем эелемент по его id: SELECT * FROM tree_elements WHERE id = ?. Потом получаем массив элементов 1-го уровня вложености, у которых parent_id равен id искомого элемента (SELECT * FROM tree_elements WHERE parent_id = ?). Получив список элементов второго уровня, делаем запрос к таблице уже с массивом id элементов второго уровня.
Например, циклом прошлись по полученным результатам элементов второго уровня, вытащили id-шники в массив $ids. Потом делаем запрос элементов третьего уровня, в который передаем массив айдишников - SELECT * FROM tree_elements WHERE id IN (?,?,?).
При обработке результатов обычно создается ассоциативный массив с полем children
$element = [
'title' => 'root',
'children' => [
[
'title' => 'child1',
'children' => [
[
'title' => 'child2',
'children' => []
],
]
],
]
]
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости