Laravel 5 многоуровневая категория - PullRequest
0 голосов
/ 06 мая 2018

У меня в настоящее время есть 2 таблицы category & subcategory, и все работает просто отлично, но мне нужен другой уровень подкатегории, который будет похож на category->sub->sub, в этом отношении я попытался найти разумное решение, и я заканчиваю с кучей пакетов, чтобы справиться с этим для меня.

теперь вопрос

  1. Должен ли я удалить свои таблицы категорий и их связи с моими другие режимы, прежде чем я попробую любой пакет, или я должен просто добавить верхнюю часть пакета моих текущих таблиц?
  2. Каков наилучший пакет для моей цели, исходя из вашего опыта?

спасибо заранее.

1 Ответ

0 голосов
/ 06 мая 2018

Вам не нужно зависеть от пакетов для реализации этого.

Вы можете создать свою таблицу categories следующим образом:

|----------|------------|---------------|
|    id    |    name    |  category_id  |
|----------|------------|---------------|

Здесь category_id - это обнуляемое поле и внешний ключ со ссылкой на id таблицы categories.

Для категории category_id поле будет NULL, а для подкатегории category_id будет его идентификатор родительской категории. Для подкатегории category_id будет идентификатором родительской подкатегории.

В модели вы можете написать отношение следующим образом:

category.php

/**
 * Get the sub categories for the category.
 */
public function categories()
{
    return $this->hasMany(Category::class);
}

Теперь вы можете получить свои подкатегории, такие как $category->categories.

N.B .: Вам не нужен стол subcategory, только один стол выполнит работу.

Обновление - Показать категории продуктов

Обновление Category.php:

/**
 * Get the parent category that owns the category.
 */
public function parent()
{
    return $this->belongsTo(Category::class);
}

В Product.php:

/**
 * Get the category that owns the product.
 */
public function category()
{
    return $this->belongsTo(Category::class);
}

Теперь вам нужно получить категорию товара и всех его родителей. Это будет множество категорий от родителей к ребенку. Тогда вы можете показать, как вы хотите.

$category = $product->category;
$categories = [$category];

while (!is_null($category) && !is_null($category = $category->parent)) {
    $categories.unshift($category);
}

// $categories = ['parent category', 'sub category', 'sub sub category' ..]

Показывать заголовок категории последовательно

foreach ($categories as $category) {
    echo $category->title . '<br>';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...