【发布时间】:2019-04-17 04:52:33
【问题描述】:
我已经为此工作了一周,我想要发生的是,选择用户尚未领取的级别奖励,但我收到一条错误消息:调用未定义method::getRelated().
claim_rewards 表由
id, reward_id, user_id, status
所以,如果一个用户有 3 个奖励要领取,而该用户领取了一个奖励,则只有剩余的两个奖励应该显示在该字段上,所以我认为“whereDoesNotHave”子句应该可行,但我可以” t 弄清楚如何完成代码以使其工作。
这是两个作用域的代码:
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.*');
}
这样会导致与 claim_rewards 表的约束关系
所以如果我把它放到一个场景中,这将是结果:
我,作为一名用户,等级为 20。我有三个奖励要领取。现在,对于我的奖励列表,我有 10、15 和 20 级的奖励可以领取。 现在,我领取了 15 级和 20 级奖励之外的 10 级奖励。所以在我的 claim_rewards 表中将有一个来自 level_rewards 表的数据。这将是claim_rewards 表的reward_id。
因此,如果领取的 10 级奖励的状态为零,则它将不再显示在该字段中。剩余要显示的奖励是 level_rewards 表中在 claim_rewards 表中状态不为零的奖励
【问题讨论】:
标签: php laravel-5.4