Laravel 5.4: вызов неопределенного метода Illuminate / Database / Query / Builder :: getRelated () - PullRequest
0 голосов
/ 17 апреля 2019

Я работаю над этим уже неделю, и я хочу, чтобы я выбирал награды за уровень, которые не были заявлены пользователем, но я получаю сообщение об ошибке: вызов undefinedmethod::getRelated().

Таблица Claim_rewards состоит из

id, reward_id, user_id, status

Таким образом, если у пользователя есть 3 награды, которые требуются, и пользователь получает одну награду, должны быть только две оставшиеся награды.отображается в поле, поэтому я предположил, что должно сработать предложение whereDoesNotHave, но я не могу понять, как выполнить код, чтобы он заработал.

Вот код двух областей:

public function scopeClaimLevel($query)
{
    return $query->join('claim_rewards','claim_rewards.reward_id','=','level_rewards.id')->select('level_rewards.*');
}

public function scopeRewards($query)
{
   return $query = LevelRewards::whereDoesntHave('claimLevel')->whereDoesntHave('claim_rewards.status','=','0')->get();
}

Я даже попробовал это:

public function scopeGetRewards($query)
{
    return $query->claimLevel()
    ->whereDoesntHave('claimLevel', function (Builder $query) {
           $query->where('claim_rewards.status', '=', '0');
     }) 
    ->select('level_rewards.*')->get();
}

Я даже включил это в LevelRewards модель:

use App\ClaimReward;

Но я все еще получаю ту же ошибку.Есть идеи как с этим бороться?Спасибо.

Редактировать:

Вот структура для таблицы level_rewards

id, level_required, item_name

Именно поэтому я сделал область действия для модели LevelRewards, которая равна

public function scopeClaimLevel($query)
{
    return $query->join('claim_rewards','claim_rewards.reward_id','=','level_rewards.id')->select('level_rewards.*');
}

Так что это приведет к ограничению отношения к таблице demand_rewards

Поэтому, если я добавлю его в сценарий, это будет результатом:

I, как пользовательна уровне 20. У меня есть три награды, чтобы требовать.Теперь, для моих списков наград, у меня есть награды 10, 15 и 20 уровня.Теперь я получил награду 10 уровня за исключением 15 и 20 уровней.Так что внутри моей таблицы Claim_rewards будут данные этого уровня из таблицы level_rewards, которая была запрошена.Это будет reward_id таблицы претендентов.

Итак, если запрошенное вознаграждение 10 уровня имеет нулевой статус, оно больше не будет отображаться в поле.Остальные награды, которые нужно отобразить, - это те, которые из таблицы level_rewards не имеют нулевого статуса в таблице demand_rewards

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Я решил эту проблему, добавив метод, но у меня есть только одна небольшая проблема, я не могу добавить еще одно предложение whereDoesntHave для Claim_reward.status:

public function rewards()
{
    return $this->hasMany('App\ClaimReward','reward_id');
}

public function scopeNotClaimed($query)
{
    return $query->whereDoesntHave('rewards');
}
0 голосов
/ 17 апреля 2019

Я подозреваю, что вы используете Illuminate\Database\Query\Builder в области запроса, но вместо этого вам следует использовать Illuminate\Database\Eloquent\Builder.

ОБНОВЛЕНИЕ

После тщательного изучения вашегокод, я понял, что вы используете whereDoesntHave с областями запросов, но это может быть использовано только с отношениями.Я предлагаю вам рефакторинг вашего запроса.

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