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

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

Susan Sarandon
Susan Sarandon原創
2024-12-24 20:34:10712瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn