За последние 24 часа нас посетили 22829 программистов и 1264 робота. Сейчас ищут 758 программистов ...

Вопрос по проектированию подкатегорий

Тема в разделе "Laravel", создана пользователем bossphp, 18 июл 2020.

  1. bossphp

    bossphp Новичок

    С нами с:
    15 июл 2020
    Сообщения:
    24
    Симпатии:
    0
    Как реализовать в магазине Категории- подкатегории - подкатегории? Чтоб у каждой подкатегории были свои подкатегории? В миграции сделал привязку товара к категории category_id. Так делать и подкатегориям? К подкатегориям тоже сделать свою таблицу или есть какие-то другие варианты?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Обычно для структуры категорий/подкатегории делается одна таблица, где есть поле parent_id указывающего на родителя данной категории/подкатегории, для корневой категории это null
     
  3. bossphp

    bossphp Новичок

    С нами с:
    15 июл 2020
    Сообщения:
    24
    Симпатии:
    0
    У меня будет несколько подкатегорий. То есть категории category_id - подкатегории parent_id - подкатегории children_id.Так?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Нет, в БД сохраняются только ссылки на родителей.

    Чтобы получить список непосредственных потомков, нужно сделать запрос с условием parent_id=$category_id [AND category_id!=$category_id или parent_id!=category_id, когда корневая идентифицируется не null'ом, а ссылкой на себя].
     
    #4 miketomlin, 19 июл 2020
    Последнее редактирование: 19 июл 2020
  5. bossphp

    bossphp Новичок

    С нами с:
    15 июл 2020
    Сообщения:
    24
    Симпатии:
    0
    Можно статью в интернете или как найти чтоб понять как решить это?
     
    #5 bossphp, 19 июл 2020
    Последнее редактирование: 19 июл 2020
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    Если я правильно понял.
    PHP:
    1. <?php
    2. $a = [
    3.     ["id" => 1, "name" => 1, "level" => 1],
    4.     ["id" => 2, "name" => 2, "level" => 2],
    5.     ["id" => 3, "name" => 3, "level" => 2],
    6.     ["id" => 4, "name" => 4, "level" => 3],
    7.     ["id" => 5, "name" => 5, "level" => 4],
    8.     ["id" => 6, "name" => 6, "level" => 2],
    9.     ["id" => 7, "name" => 7, "level" => 7],
    10.     ["id" => 8, "name" => 8, "level" => 2],
    11. ];
    12.  
    13. function d ( array $arr )
    14. {
    15.     $l = 0;
    16.    
    17.     foreach ( $arr AS [ 'name' => $name, 'level' => $lvl ] )
    18.     {
    19.         if ( $l < $lvl )
    20.         {
    21.             echo str_repeat ( '<ul><li>', $lvl - $l ) . $name;
    22.            
    23.             $l = $lvl;
    24.         }
    25.         elseif ( $l === $lvl )
    26.         {
    27.             echo '</li><li>' . $name;
    28.         }
    29.         elseif ( $l > $lvl )
    30.         {
    31.             echo str_repeat ( '</li></ul>', $l - $lvl ) . '<li>' .$name;
    32.            
    33.             $l = $lvl;
    34.         }
    35.     }
    36.    
    37.     echo str_repeat ( '</li></ul>', $l );
    38. }
    39.  
    40. echo d ( $a ) . PHP_EOL;
     
  7. bossphp

    bossphp Новичок

    С нами с:
    15 июл 2020
    Сообщения:
    24
    Симпатии:
    0
    К чему-то это? Я хочу реализовать . Категории category_id - подкатегории parent_id - подкатегории children_id. НРапример, у магазина розетки 2 подкатегории
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    https://gist.github.com/codedokode/10539720

    К примеру :)

    Я люблю Nested Sets, и они достаточно неплохо поддерживаются расширениями Laravel

    В MySQL 8 появились рекурсивные запросы, которые, по идее, практически убирают необходимость в сложных решениях типа Nested Sets, но я с ними ещё не игрался на проектах.

    https://www.mysqltutorial.org/mysql-adjacency-list-tree/

    Инфы, короче, навалом.
     
    Dimon2x нравится это.
  9. bossphp

    bossphp Новичок

    С нами с:
    15 июл 2020
    Сообщения:
    24
    Симпатии:
    0
    Код (Text):
    1. Простая схема для таблицы:
    2. Schema::create('categories', function (Blueprint $table) {
    3.     $table->bigIncrements('id');
    4.     $table->string('name');
    5.     $table->unsignedBigInteger('category_id')->nullable();
    6.     $table->foreign('category_id')->references('id')->on('categories');
    7.     $table->timestamps();
    8. });
    нашел примерную реализацию
     
  10. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    Имхо не очень удачно название category_id, parent_id привычнее
    Ну а в целом, это то что что вам и говорили
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Товар ссылется на конечную категорию. Независимо от того, на какой "глубине" дерева категорий она находится. Ссылка одна.
    Сама категория может ссылаться на родительскую категорию, а та на свою родительскую категорию и т.д. Образуется "дерево" категорий.
    Варианты есть, но ты ими не увлекайся. Сделай как попроще. Поле categories.parent_id решает всё. Главное — добиться чтобы работало. Это ключ ко всему. ;)

    --- Добавлено ---
    Твоя проблема, Убунта, что ты нифига не доводишь до конца. Ты просто накапливаешь кучу новых слов, вываливаешь на форумы новые вопросы "как" и топаешь дальше к новым "ничего не получилось". Ты добейся результата в малом, потом чуть усложни и снова добейся. И так расти. Вопросы, которые не опираются на опыт, ничего не дают кроме потери времени.