Я прошу всех данных о спортсменах из вызова api, как это, и все идет отлично.Laravel: Как я могу вернуть массив внутри коллекции?
MyController.php
public function get($year, $position_id)
{
$collection = collect(
$athletes = Athlete::where('athletes.graduation_year', $year)
->join('athlete_position', 'athlete_position.athlete_id', '=', 'athletes.id')
->where('athlete_position.position_id', '=', $position_id)
->join('evaluations', 'evaluations.athlete_id', 'athletes.id')
->whereNotNull('evaluations.comments')
->where('evaluations.status', 'published')
->orderBy('rank', 'asc')
->orderBy('rating', 'asc')
->orderBy('last_name', 'asc')
->get()
)->groupBy('rating');
return response()->json(['data' => $collection], 200);
}
Теперь я хотел бы, чтобы добавить свою таблицу оферты этому присоединиться:
...
->join('evaluations', 'evaluations.athlete_id', 'athletes.craft_id')
->whereNotNull('evaluations.comments')
->where('evaluations.status', 'published')
->join('offers', 'offers.athlete_id', 'athletes.craft_id')
...
Который работает, но теперь я получаю дубликаты спортсменов; по одному для каждого предложения. Например, если у спортсмена три предложения, я получу одного и того же спортсмена три раза - один раз для каждого предложения.
Что бы я хотел, это массив предложений в коллекции. Нечто подобное выглядит следующим образом:
$athlete {
...
'evaluation': '<p>My evaluation...</p>',
'offers': [
{'school': '<p>Clemson</p>','committed': 1},
{'school': '<p>Alabama</p>', 'committed': 0}
]
...
}
Таким образом, я получаю только одну запись для каждого спортсмена, но каждый спортсмен может иметь много предложений.
Мои модели выглядят следующим образом:
Athlete.php
public function offers()
{
return $this->hasMany('App\Offer');
}
Offer.php
public function athletes()
{
return $this->belongsToMany('App\Athlete');
}
Все данные должным образом возвращается в течение моего приложения - это просто вызов API - это то место, где я борюсь.
Благодарим за любые предложения!
EDIT
Вот что мои выберите выглядит сейчас:
$collection = collect(
$athletes = DB::table('athletes')->select('craft_id', 'first_name', 'last_name', 'email', 'high_school_state', 'graduation_year', 'rank', 'rating', 'evaluations.comments', 'offers.school')
->where('athletes.graduation_year', $year)
->join('athlete_position', 'athlete_position.athlete_id', '=', 'athletes.craft_id')
->where('athlete_position.position_id', '=', $position_id)
->join('evaluations', 'evaluations.athlete_id', 'athletes.craft_id')
->whereNotNull('evaluations.comments')
->where('evaluations.status', 'published')
->join('offers', 'offers.athlete_id', 'athletes.craft_id')
->orderBy('rank', 'asc')
->orderBy('rating', 'asc')
->orderBy('last_name', 'asc')
->get()
)->groupBy('rating');
Это возвращает данные, если у меня есть больше, чем одно предложение, вместо того, чтобы получать предложения как массив, я вернуть две полные записи.
"data": {
...
{
"first_name": "Tyler",
"last_name": "Durden",
"offers": "Clemson"
},
{
"first_name": "Tyler",
"last_name": "Durden",
"offers": "Alabama"
},
Я пытаюсь получить:
"data": {
...
{
"first_name": "Tyler",
"last_name": "Durden",
"offers": [
"school": "Clemson"
"school": "Alabama"
]
},
Я не думаю, что я низкий. Я обновил свой вопрос, чтобы попытаться показать, что я изменил, чтобы попробовать ваше предложение. – Damon