將變數傳遞到Laravel AdvancedWhere 閉包
Laravel 文件提供了一個使用帶有閉包的whereExists 來連接表的範例:
DB::table('users') ->whereExists(function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();
但是如果你需要將外部變數傳遞到閉包中怎麼辦,例如搜尋
->where('city_id', '=', $this->city->id) ->where(function($query) { $query->where('name', 'LIKE', '%'.$searchQuery.'%') ->orWhere('address', 'LIKE', '%'.$searchQuery.'%') })
目前的解決方案是建立一個新的屬性並使用$this 來存取它,但是有沒有更方便的方法呢?
是的,你可以使用 use 關鍵字來查詢將變數從父作用域傳遞到閉包:
DB::table('users')->where(function ($query) use ($activated) { $query->where('activated', '=', $activated); }) ->get();
在 PHP 7.4中,您可以使用較短的箭頭函數語法:
DB::table('users')->where(fn($query) => $query->where('activated', '=', $activated)) ->get();
箭頭函數和常規閉包之間的主要區別:
以上是如何將變數傳遞到 Laravel AdvancedWhere 閉包中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!