![](/img/trans.png)
[英]Call to undefined method Illuminate\Database\Query\Builder::notify() Laravel 5.4
[英]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.