ОБНОВЛЕНИЕ:
Я пытаюсь добавить свой собственный атрибут с результатами подзапроса к результатам основного запроса.
Теперь у меня есть связь «многие ко многим» между тремя столами: турниры, участники и пользователи.
Вот определение отношения в модели Турниров:
public function users() {
return $this->belongsToMany('App\User', 'Participants', 'Id_tourn', 'Id_user')->withPivot('Rating');
}
Структура таблиц:
Users:
-Id
-Name
Participants:
-Id
-Id_user
-Id_tournament
-Final
-Final_place
Tournaments:
-Id
-Name
Мне нужно иметь дополнительный атрибут Winners
в моем конечном результате запроса, где у меня будет информация о первых трех местах.
Следуя документации, я создал аксессор и попробовал разные варианты:
Это просто заморозить систему. Ничего не происходит, и через 30 секунд я получаю ошибку тайм-аута.
public function getWinnersAttribute() {
return Tournaments::where("Id","=",$this->attributes['Id'])->where("Finals","=",1)->limit(3)->orderBy("Final_place","asc")->get();
}
Возвращает ошибку, из-за которой столбец «финалов» не является источником в таблице турниров, поэтому $this
не имеет отношения:
public function getWinnersAttribute()
{
return $this->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get();
}
Возвращает пустую белую страницу без чего-либо:
public function getWinnersAttribute()
{
return $this->with('users')->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get();
}
Этот возвращаемый атрибут "Победители" пуст:
public function getWinnersAttribute()
{
return $this->with("users")->where("Finals","=",1)->limit(3)->orderBy("final_place","asc");
}
Я создал $appends
переменную для применения метода доступа: protected $appends = ['Winners'];
Однако я проверил аксессор, он работает. Если я вернусь только:
public function getWinnersAttribute()
{
return "123";
}
все работает нормально, и я получаю "123"
внутри "winners"
атрибут основного результата запроса.
Основной запрос:
Tournaments::with(['users'])->get();
Столбец Finals
находится в сводной таблице отношения «многие ко многим».
ОБНОВЛЕНИЕ:
Когда я пытаюсь вернуть запрос к этой модели без отношения:
public function getWinnersAttribute($value)
{
return $this->where("Finals",'=',2);
}
Я тоже ничего не получаю в атрибуте winners. Вроде подзапрос не выполняется.
И если я добавлю get()
в конце возврата:
return $this->where("Finals",'=',2)->get();
Я получаю пустую белую страницу.
Как я могу решить эту проблему?
Большое спасибо.