簡體   English   中英

Laravel 5.4:調用未定義的方法Illuminate / Database / Query / Builder :: getRelated()

[英]Laravel 5.4: Call to undefined method Illuminate/Database/Query/Builder::getRelated()

我已經在這個工作了一個星期了,我想要發生的是,選擇用戶沒有聲明的級別獎勵,但是我收到一個錯誤,上面寫着:調用未定義的method::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.*');
}

這樣會導致與claim_rewards表的約束關系

因此,如果我將其置於場景中,這將是結果:

我,作為一個用戶在20級。我有三個獎勵要求。 現在,對於我的獎勵清單,我有10級,15級和20級獎勵。 現在,除了15級和20級獎勵外,我還獲得了10級獎勵。 因此,在我的claim_rewards表中,將包含來自level_rewards表的數據。 這將是claim_rewards表的reward_id。

因此,如果聲明的10級獎勵的狀態為零,則它將不再顯示在該字段中。 要顯示的剩余獎勵是來自level_rewards表的那些在claim_rewards表中沒有狀態為零的獎勵

我懷疑您在查詢范圍中使用Illuminate\\Database\\Query\\Builder ,但您應該使用Illuminate\\Database\\Eloquent\\Builder

UPDATE

在仔細檢查了您的代碼之后,我意識到您正在使用whereDoesntHave查詢范圍,但它只能用於關系。 我建議你重構你的查詢。

我通過添加方法解決了這個問題,但我只有一個小問題,我不能為claim_reward.status添加另一個whereDoesntHave子句:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM