Сводный стол для одного стола в Laravel - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь добавить многоуровневые категории на моем сайте.где категория может иметь нескольких детей , а также иметь нескольких родителей .Похоже, что отношения между многими в Laravel, и я должен использовать сводную таблицу.

Чтобы я создал таблицу с именем Categories , а также сводную таблицу Categories_reltionship , как показано ниже.Теперь мой вопрос в том, как я смогу связать эти многие со многими из этой единственной таблицы в Laravel.

categories table
==================
id    title
===   ======
1     title_1
2     title_2
3     title_3
4     title_4
5     title_5
categories_relationship table
==================
parent_id    child_id
==========   ======
1            2
1            3
4            2
4            3
5            2
5            3

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Вы можете использовать методы, подобные приведенным ниже, для Category модели:

//This will get you the list of categories
public function categories()
{
    return ($this->hasManyThrough('App\Models\Category', 'App\Models\CategoryRelation', 'child_id', 'id', 'id', 'parent_id'));
}

//This will get you the list of children
public function childs()
{
    return ($this->hasManyThrough('App\Models\Category', 'App\Models\CategoryRelation', 'parent_id', 'id', 'id', 'child_id'));
}

на CategoryRelation модель:

class CategoryRelation extends Model
{
    protected $table = 'categories_relationship';
}

Надеюсь, это поможет вам решить вашу проблему

Примечание: я предлагаю вам иметь 3 таблицы для много ко многим отношений,

0 голосов
/ 13 мая 2019

во многих отношениях со многими вы должны иметь три таблицы . Я надеюсь, что вам поможет пример ниже. В нашем сценарии, как уже упоминалось, у нас есть три таблицы с именами пользователей, ролей и сводок, в которых каждый пользователь может иметь несколько ролей, а каждая роль независима от многих пользователей.

user table have my_user_id(optional name) and other need column.
role table to have my_role_id (optional name) and other.
pivot table includes my_user_id , my_role_id.

in Модель пользователя Ваши коды должны отображаться ниже:

class User extends Model
{
    public function roles()
      {
         return $this->belongsToMany('App\Role', 'pivot', 'my_user_id', 'my_role_id');
      }
}

in Ролевая модель Ваши коды должны отображаться ниже:

class Role extends Model
{
    public function users()
      {
         return $this->belongsToMany('App\User', 'pivot', 'my_role_id', 'my_user_id');
      }
}

Вы также можете обратиться к официальной документации Laravel: отношения многие ко многим

...