#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);
}