article_options
- это ваша сводная таблица, а связь между статьей и опциями - это отношение «многие ко многим», которое laravel предоставляет функцию для здесь . Итак, все, что вам нужно сделать, это добавить отношение к вашей модели article
.
public function options() {
return $this->belongsToMany(Option::class);
}
, тогда при получении статей вы можете назвать это отношение.
$articles = Article::with('options')->get();
Это будет захват все статьи со всеми связями опций и отформатируйте их так, как вам нужно. Laravel может автоматически определять, какие поля необходимо использовать для формирования связи между таблицами, поэтому не беспокойтесь об этом, хотя у него есть возможность предоставить их в функции belongsToMany
.
Если вам нужен только идентификатор, который вы можете передать c столбцы в функцию with
, как показано ниже.
$articles = Articles::with('options:id')->get()
Чтобы затем вернуться в формате json, вы можете использовать ресурсы . Ресурсы помогают лучше отформатировать коллекцию модели, которую можно использовать для достижения желаемого. Вам нужно будет создать ресурс для статей. В ресурсе статьи вы можете отформатировать его так, как вы хотите, и отформатировать параметры, которые вы можете использовать методы сбора, чтобы преобразовать его в массив идентификаторов, извлекая поле из коллекции.
Ресурс статьи
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'options' => $this->options->pluck('id')->all(),
];
}
Итак, как только у вас есть статьи, вы можете вернуть их вот так
return new ArticlesResource::collection($articles);
Если позже вы захотите передать дополнительные столбцы для параметров, вы можете создать ресурс параметров и передать его в введите параметры в своем ресурсе статьи.
'options' => new OptionsResource::collection($this->options)