Заставить Laravel Accessor возвращать результаты запроса

ОБНОВЛЕНО:

Я пытаюсь добавить свой собственный атрибут с результатами подзапроса к результатам основного запроса.

Теперь у меня есть связь «многие ко многим» между тремя столами: турниры, участники и пользователи.

Вот определение отношения в модели Турниров:

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 атрибут в моем конечном результате запроса, где у меня будет информация о первых трех местах.

Следуя документации, я создал аксессор и попробовал разные варианты:

  1. Это просто заморозить систему. Ничего не происходит, и через 30 секунд я получаю ошибку тайм-аута.

    public function getWinnersAttribute() {
    return Tournaments::where("Id","=",$this->attributes['Id'])->where("Finals","=",1)->limit(3)->orderBy("Final_place","asc")->get();
    }

  2. Это возвращает ошибку о том, что столбец «финал» не найден в таблице турниров, поэтому $this не имеет отношения:

    public function getWinnersAttribute()
    {
    return $this->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get();
    }

  3. Это возвращает пустую белую страницу без чего-либо:

    public function getWinnersAttribute()
    {
    return $this->with('users')->where("Finals","=",1)->limit(3)->orderBy("final_place","asc")->get();
    }

  4. Этот возвращаемый атрибут Winners пуст:

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

Я ничего не получаю в атрибуте победителей. Вроде подзапрос не выполняется.

И если я добавлю get() в конце возврата:

return $this->where("Finals",'=',2)->get();

Я получаю пустую белую страницу.
Как я могу решить эту проблему?

Большое спасибо.

0

Решение

Если getWinnersAttribute на модели Турнира, это означает, что у вас уже есть модель Турнира, которую вы вызываете, например, Tournament::find(1)->winners В вашем атрибуте вы тоже пытаетесь найти модель снова, и это может сделать это бесконечным циклом, пытаясь найти новую, уже имеющую такую ​​и т. Д., Попробуйте использовать $this вместо

public function getWinnersAttribute()
{
return $this->where("finals","=",1)->limit(3)->orderBy("final_place","asc")->get();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector