Как получить данные с прикрепленными сводными данными? - PullRequest
0 голосов
/ 25 мая 2019

Я пытаюсь получить данные из своей таблицы Lists и включить массив с идентификаторами треков в этом списке.

Это образец модели базы данных с отношением N: M.

database model

В моей модели List я добавил этот метод:

public function tracks()
{
   return $this->belongsToMany(Track::class, 'List_Tracks', 'id_list', 'id_track');
}

Итак, в моем ListController я делаю следующее:

$list = List::find($id);
$list->tracks_list = $list->tracks->pluck('track_id');
return $list;

И я получаю столько же объектов, сколько треков в одном списке, например:

[
{
 "id_track": 1,
 "name": "Yesterday",
 "tracks_list": [
  1,
  2
 ]
 "pivot": {
    "id_list": 1,
    "id_track": 1
 }
},
{
 "id_track": 2,
 "name": "Lucy in the sky with diamonds",
 "pivot": {
    "id_list": 1,
    "id_track": 2
 }
}
]

Но я хочу получить:

{
 "id_list": 1,
 "name": "The Best of The Beatles",
 "tracks_list": [
  1,
  2
]
}

Я думаю, что то, что я пробовал, намного сложнее, чем правильное решение.

Как бы вы получили данные таким образом?

Заранее спасибо.

1 Ответ

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

Сначала необходимо загрузить отношение, а затем написать остаток красноречивого запроса, в противном случае вы получите только список идентификаторов из сводной таблицы.

List::with('tracks')->where('id', '=', $id)->first();
// Following method should work too
List::with('tracks')->find($id);


Исходя из вашего комментария - чтобы получить только массив идентификаторов, связанных со списком, вам не нужно загружать отношения и использовать только:

List::find($id)->tracks()->pluck('id');
// In case previous method will not work, you can try this one:
List::find($id)->tracks()->pluck('tracks.id');
// before dot should be name of the table, not relationship's.

Так что если вам нужны только идентификаторы прикрепленных дорожекв плейлист.Я бы порекомендовал добавить в вашу модель списка следующий метод:

// App\Models\List
public function getTrackIdsAttribute()
{
    return $this->tracks->pluck('id')->toArray();
}

Тогда вы сможете просто позвонить List::find($id)->trackIds, чтобы получить все идентификаторы дорожек, прикрепленные к данному списку.Если вы не уверены, почему я определяю метод как getTrackIdsAttribute и вызываю только trackIds для модели, взгляните на Eloquent: Mutators .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...