Laravel Eloquent, Древовидные категории

826
07 февраля 2017, 22:50

Всем привет, хотел бы обратиться за помощью чтобы зарефакторить отношнения в моделях в Laravel. Есть у меня таблица вида:

------------|------------|------------|--------------|
    City    |  Category  |Subcategory |   Company    |
------------|------------|------------|--------------|
     id     |     id     |    id      |     id       |
            |   city_id  |category_id |subcategory_id|
    name    |    name    |    name    |    name      |
------------|------------|------------|--------------|

City.php

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

Category.php

public function subcategories()
{
    return $this->hasMany(Subcategory::class);
}

Subcategory.php

public function category()
{
    return $this->hasMany(Company::class);
}

В общем проблема в том что городов много а категории могут быть одни и те же для всех городов, в моём случае же категории повторяются для каждого города, вчера весь день над этим думал, пробовал все возможные отношения с Laravel и никак не смог продумать логику. Пример: Если я добавляю например новый города и после этого захочу к нему категории прикрепить и каждый раз получается что я создаю новую и дублирующую категории именно для 1 города... Очень надеюсь на помощь...Как правильно нужно такое сделать!?

Логика такая: У нас есть города у которых много компаний и эти компании поделены на категории и подкатегории. Как на zoon.ru сделано. Выбираешь город, появляется категории и внизу подкатегории.

Answer 1
------------|-------------|------------|------------|--------------|
    City    |city_category|  Category  |Subcategory |   Company    |
------------|-------------|------------|------------|--------------|
     id     |   city_id   |     id     |    id      |     id       |
            |             |            |category_id |subcategory_id|
    name    | category_id |    name    |    name    |    name      |
------------|-------------|------------|------------|--------------|

Добавте табличку и метод belongsToMany в модели

Answer 2

Необходимо создать 2 дополнительные таблицы:

1) city_category c составным ключом: {city_id,category_id}, что позволит нам указывать только те категории, которые есть в данном городе

2) category_company с ключом: {category_id,company_id}, позволит связывать несколько компаний с несколькими категориями

Так же можно упразднить таблицу Subcategory, добавив в таблице Category поле parent_id, так как по факту это одна и та же сущность, но это только в том случае если у вас одна категория не может иметь несколько родителей.

READ ALSO
Выборка из нескольких таблиц

Выборка из нескольких таблиц

Доброго времени сутокПомогите решить задачу с MySQL (знаком довольно плохо):

528
Вывод контента в зависимости от страны

Вывод контента в зависимости от страны

Здравствуйте, стоит такая задачав контактах для посетителей страны России показывать один блок контактов, для посетителей с Украины другой,...

650
Не работает функция console.log

Не работает функция console.log

Нативная функция consolelog ничего не выводит в firebug окне

1735
Не поддаётся regexp

Не поддаётся regexp

Суть в чем, делаю расширение для хром, ему нужно обработать адрес открытой страницыСтруктура сайта такая: http://site

558