首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel5.4:调用未定义方法Illuminate/Database/Query/Builder::getRelated()

Laravel5.4:调用未定义方法Illuminate/Database/Query/Builder::getRelated()
EN

Stack Overflow用户
提问于 2019-04-17 04:52:33
回答 2查看 5.4K关注 0票数 1

我已经做了一个星期了,我想要做的是,选择用户没有声明的级别奖励,但是我得到了一个错误:调用未定义的method::getRelated()

claim_rewards表由以下内容组成

代码语言:javascript
复制
id, reward_id, user_id, status

因此,如果用户有3项奖励,而用户要求一项奖励,则只应在字段中显示剩余的两项奖励,因此我认为应该使用“whereDoesNotHave”子句,但我想不出如何实现代码才能使其工作。

以下是这两个作用域的代码:

代码语言:javascript
复制
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();
}

我甚至试过这个:

代码语言:javascript
复制
public function scopeGetRewards($query)
{
    return $query->claimLevel()
    ->whereDoesntHave('claimLevel', function (Builder $query) {
           $query->where('claim_rewards.status', '=', '0');
     }) 
    ->select('level_rewards.*')->get();
}

我甚至将其包含在LevelRewards模型中:

代码语言:javascript
复制
use App\ClaimReward;

但我还是会犯同样的错误。对如何处理这件事有什么想法吗?谢谢。

编辑:

下面是level_rewards表的结构

代码语言:javascript
复制
id, level_required, item_name

这就是为什么我在LevelRewards模型中引入了一个范围,该模型是

代码语言:javascript
复制
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表的数据。它将是reward_id表的claim_rewards。

因此,如果声称的10级奖励的状态为零,那么它将不再显示在字段中。要显示的其余奖励是,来自level_rewards表的那些在claim_rewards表中没有零状态的奖励

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-17 07:47:40

我通过添加一个方法解决了这个问题,但是我只有一个小问题,我不能为claim_reward.status添加另一个claim_reward.status子句:

代码语言:javascript
复制
public function rewards()
{
    return $this->hasMany('App\ClaimReward','reward_id');
}

public function scopeNotClaimed($query)
{
    return $query->whereDoesntHave('rewards');
}
票数 0
EN

Stack Overflow用户

发布于 2019-04-17 05:11:04

我怀疑您在查询范围中使用Illuminate\Database\Query\Builder,但应该使用Illuminate\Database\Eloquent\Builder

更新

在仔细检查了您的代码之后,我意识到您使用的是带有查询范围的whereDoesntHave,但它只能用于关系。我建议你重构你的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55720136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档