首頁 > 資料庫 > mysql教程 > 如何將變數傳遞到 Laravel AdvancedWhere 閉包中?

如何將變數傳遞到 Laravel AdvancedWhere 閉包中?

Susan Sarandon
發布: 2024-12-24 20:34:10
原創
704 人瀏覽過

How Can I Pass Variables into Laravel Advanced Where Closures?

將變數傳遞到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();
登入後複製

箭頭函數和常規閉包之間的主要區別:

  • fn 關鍵字而不是函數
  • 從父作用域自動擷取變數
  • 箭頭函數總是回傳一個值
  • 回傳關鍵字必須是省略
  • 箭頭函數必須有一個表達式作為回傳語句

以上是如何將變數傳遞到 Laravel AdvancedWhere 閉包中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板