亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel 在 eloquent 查詢日志中作用于無限循環

Laravel 在 eloquent 查詢日志中作用于無限循環

PHP
慕絲7291255 2023-08-11 16:29:52
我制作了一個范圍,但不知何故最終陷入無限循環。在將其簡化為最小的可重現示例時,我得出了以下結論:public function apply(Builder $builder, Model $model){    Log::info('[Search] SQL: ' . $builder->toSql() . " Bindings: " . implode(', ', $builder->getBindings()));}范圍以標準方式在模型中實現:protected static function booted(){    static::addGlobalScope(new AuthorizationScope());}如果我像這樣運行代碼,最終會出現以下錯誤:已達到最大函數嵌套級別“256”,正在中止!為什么無法在范圍本身內獲取 SQL 轉儲?這可以以某種方式修改嗎?在其他地方啟用數據庫查詢日志之類的選項實際上并不是這個問題的一部分。
查看完整描述

1 回答

?
拉莫斯之舞

TA貢獻1820條經驗 獲得超10個贊

我回答說這確實是一個遞歸調用。

由于toSql()不是一種Eloquent\Builder方法,而是一種方法Query\Builder,因此它通過魔術方法轉發,在這種情況下,需要在實際執行范圍之前__call()獲取應用范圍的查詢構建器實例:

public?function?toBase(){
????return?$this->applyScopes()->getQuery();
}

再往下, applyscopes 調用apply()返回到我的代碼的方法,該方法再次一遍又一遍地觸發相同的事情:

if?($scope?instanceof?Scope)?{
????$scope->apply($builder,?$this->getModel());
}

所以回答我自己的問題,由于以下原因不可能做我想做的事。


查看完整回答
反對 回復 2023-08-11
  • 1 回答
  • 0 關注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號