Laravel Отношения столбцы одной таблицы - PullRequest
0 голосов
/ 25 октября 2019

Я создаю таблицу для хранения родительской категории и ее дочерних элементов (подменю).

Я пытаюсь связать столбец «подменю» со столбцом «id» той же таблицы.

Я буду использовать это отношение для создания меню подменю, используя foreach.

My MySQl Table:

ID | submenu | name
1  | null    | Products
2  | 1       | Submenu Level 1 (A)
3  | 1       | Submenu Level 1 (B)
4  | null    | Phones
5  | 4       | Samsung
6  | 4       | Apple

Теперь я выберу всех отцов.

$categorias = Categorias::withCount('submenu')->where('ativo', 1)->whereNull('submenu')->get();

Теперь я не могу продолжить.

Я бы хотел это сделать.

<ul>
  @foreach($categorias as $n1){
    <li>
      <a href="">{{ $n1->name }}</a> // Here work
        @if( $n1->submenu_count > 0 )
          <ul>

            // I can't do this.
            @foreach($n1->submenus() as $n2)
              <li> <a href="">{{ $n2->nome }} </li>
            @endforeach


          </ul>
        @endif
    </li>
  @endforeach
</ul>

Вот несколько способов, которые я пытался сделать в модели.

public function parent() {
    return $this->belongsTo('Categorias','submenu');
}

public function submenu(){
    return $this->hasMany('App\Categorias','submenu');
}

public function submenu(){
   return $this->hasMany('App\Categorias', 'id', 'submenu');
}

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Измените ваши отношения с моделью следующим образом.

Категория.php модель

public function parent() {
    return $this->belongsTo('Categorias','submenu','id');
}

public function submenus(){
    return $this->hasMany('App\Categorias','submenu','id');
}

Ваш запрос будет.

$categorias = Categorias::with('submenus')->whereNull('submenu')->get();

Выне нужно использовать withCount в блейд-файле, вы можете проверить это с условием !empty. Я удалил ->where('ativo', 1), как я не вижу в таблице.

В вашем блейд-файле сделайте код как.

<ul>
  @foreach($categorias as $n1){
    <li>
      <a href="">{{ $n1->name }}</a> // Here work
        @if(!empty($n1->submenus))
          <ul>


            @foreach($n1->submenus as $n2)
              <li> <a href="">{{ $n2->name }} </li>
            @endforeach


          </ul>
        @endif
    </li>
  @endforeach
</ul>
0 голосов
/ 25 октября 2019

Может сделать это

public function submenus(){
    return $this->hasMany(Categorias::class,'submenu', 'id');
}

$categorias = Categorias::with('submenus')->whereNull('submenu')->get();
...