Я работаю над этим уже неделю, и я хочу, чтобы я выбирал награды за уровень, которые не были заявлены пользователем, но я получаю сообщение об ошибке: вызов 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