Сводная таблица Laravel (восстановить все элементы, которые принадлежат)

#php #laravel

#php #laravel

Вопрос:

У меня есть таблица элементов, которая содержит поля, у меня есть таблица шаблонов, которая группирует поля с помощью сводной таблицы, у меня есть таблица страниц, которая содержит используемый шаблон

Мне нужно получить список полей, связанный с шаблоном, используемым страницей

     $gestionPage->load('template', 'parent');
    $page = $gestionPage->get()[0];
    $formulaire = Item::find($page->template_id)->with('itemsTemplate')->get();

    foreach($formulaire as $k=>$v){
        $data[] = $v->nom;
    }
    dd($data);
  

Итак, $data содержит все поля (а не только то, которое принадлежит правильному шаблону)

    array:3 [▼
     0 => "Titre"
     1 => "Texte"
     2 => "wysiwyg"
   ]
  

2 => «wysiwyg» не является частью шаблона …

Он должен выводить

    array:2 [▼
     0 => "Titre"
     1 => "Texte"
   ]
  

Я не понимаю, как работает сводная система…

В модели элемента

 public function itemsTemplate()
{
    return $this->belongsToMany(Template::class);
}
  

В модели элемента

 public function items()
{
    return $this->belongsToMany(Item::class);
}
  

Как легко восстановить список элементов, принадлежащих идентификатору шаблона?

Ответ №1:

Попробуйте это здесь:

 public function templates() 
{
    return $this->belongsToMany(Template::class)->withPivot(array $fields);
}

public function items()
{
    return $this->belongsToMany(Item::class)->withPivot(array $fields)
}

  

затем вы можете получить доступ к полям сводной таблицы, как это здесь:
$item-> pivot-> field

Комментарии:

1. Спасибо! верните $this->belongsToMany(Item::class)->С помощью pivot(array(‘template_id’, ‘item_id’)); сделал трюк!

Ответ №2:

Я внес некоторые изменения в ваш код. Посмотрите, работает ли это сейчас. Узнайте, сколько отношений «многие ко многим» работает в Laravel по этой ссылке https://laravel.com/docs/8.x/eloquent-relationships#many-to-many

 $gestionPage->load('template', 'parent');
$page = $gestionPage->get()[0];

$formulaire = Item::find($page->template_id)->templates()->get();

dd($formulaire);

//Rename this from itemsTemplate to templates - just because is plural

public function templates() 
{
    return $this->belongsToMany(Template::class);
}

public function items()
{
    return $this->belongsToMany(Item::class);
}