Я хочу удалить все связанные дочерние категории из родительских категорий. Я думаю, что мне нужна рекурсивная функция для решения этой проблемы. Вот моя попытка:
public function destroy(Request $request)
{
$categories = \App\Categories::select('parent_id')->whereNotNull('parent_id')->get();
foreach ($categories as $category) {
if ($category->parent_id == $request->cid) {
$childCategories = \App\Categories::select('parent_id')->where('parent_id', $category->parent_id)->get();
}
}
}
Моя таблица выглядит следующим образом
+-------------+----------+-----------+
| id | name | parent_id |
+-------------+----------+-----------+
| 1 | MAIN | NULL |
+-------------+----------+-----------+
| 2 | CHILD | 1 |
+-------------+----------+-----------+
| 3 | CHILD 2 | 2 |
+-------------+----------+-----------+
Мои ожидания:
Если я удалил основную категорию, ребенок и ребенок Необходимо удалить 2 категории.
Как я могу выполнить это с eloquent?
Ответы в порядке, но это не сработало, как я ожидал. Я хочу удалить все подкатегории и их производные. Приведенные примеры показывают только первый узел.
РЕШЕНИЕ
Я исправил эту проблему с помощью миграций.
Я создал FOREIGN KEY для PARENT_ID, который ссылается на к идентификатору категории в файле миграции. Когда я выполняю действие удаления, оно удаляет себя с дочерними узлами (это работает также в том случае, если у его дочерних узлов есть дочерние узлы).
Вот код миграции, который я использовал:
$ table- > иностранный ( 'parent_id') -> ссылки ( 'ID') -> по ( 'категорий') -> OnDelete ( 'каскад'); Тогда
App \ Categories :: find ($ id) -> delete (); удалено с дочерними узлами.