我制作了一個范圍,但不知何故最終陷入無限循環(huán)。在將其簡化為最小的可重現(xiàn)示例時,我得出了以下結(jié)論:public function apply(Builder $builder, Model $model){ Log::info('[Search] SQL: ' . $builder->toSql() . " Bindings: " . implode(', ', $builder->getBindings()));}范圍以標準方式在模型中實現(xiàn):protected static function booted(){ static::addGlobalScope(new AuthorizationScope());}如果我像這樣運行代碼,最終會出現(xiàn)以下錯誤:已達到最大函數(shù)嵌套級別“256”,正在中止!為什么無法在范圍本身內(nèi)獲取 SQL 轉(zhuǎn)儲?這可以以某種方式修改嗎?在其他地方啟用數(shù)據(jù)庫查詢?nèi)罩局惖倪x項實際上并不是這個問題的一部分。
1 回答

拉莫斯之舞
TA貢獻1820條經(jīng)驗 獲得超10個贊
我回答說這確實是一個遞歸調(diào)用。
由于toSql()
不是一種Eloquent\Builder
方法,而是一種方法Query\Builder
,因此它通過魔術(shù)方法轉(zhuǎn)發(fā),在這種情況下,需要在實際執(zhí)行范圍之前__call()
獲取應(yīng)用范圍的查詢構(gòu)建器實例:
public?function?toBase(){ ????return?$this->applyScopes()->getQuery(); }
再往下, applyscopes 調(diào)用apply()
返回到我的代碼的方法,該方法再次一遍又一遍地觸發(fā)相同的事情:
if?($scope?instanceof?Scope)?{ ????$scope->apply($builder,?$this->getModel()); }
所以回答我自己的問題,由于以下原因不可能做我想做的事。
- 1 回答
- 0 關(guān)注
- 118 瀏覽
添加回答
舉報
0/150
提交
取消