Laravel realationship найти корневого родителя

#mysql #database #laravel #eloquent #relationship

#mysql #База данных #laravel #красноречивый #связь

Вопрос:

У меня есть categories таблица с такой структурой:

 id
title
category_id
 

Отношения модели категории:

 public function categories()
{
    return $this->hasMany(Category::class);
}

public function subcategories()
{
    return $this->categories()->with('subcategories');
}

public function parent()
{
    return $this->belongsTo(Category::class);
}
 

Пример данных таблицы:

 {
    "id": 1,
    "title": "Product Categories Group",
    "category_id": null
},
{
    "id": 2,
    "title": "Buy",
    "category_id": 1
},
{
    "id": 3,
    "title": "Sale",
    "category_id": 1
},
{
    "id": 4,
    "title": "Fruits",
    "category_id": 2
},
{
    "id": 5,
    "title": "Apple",
    "category_id": 4
}
 

В этом случае, как я могу проверить родительскую категорию, это Buy категория или Sale использование id . Например, как проверить Apple родительскую категорию Buy или Sale категорию?

Ответ №1:

вы можете использовать цикл while, пока он не найдет родителя

попробуйте это

 $category = Category::where('title', 'Apple')->firstOrFail();
if (!$category->category_id) {
        $parentCategory = $category;
}
while (isset($category->category_id)) {
    $category = Category::find($category->category_id);
}

return $parentCategory;
 

Комментарии:

1. я думаю, это должно быть рекурсивно.