Laravel Advanced Wheres, как передать переменную в функцию?

Пример в документе:

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-> , но есть ли более удобный способ?

Solutions Collecting From Web of "Laravel Advanced Wheres, как передать переменную в функцию?"

Вы можете передать необходимые переменные из родительской области в закрытие с use ключевого слова use .

Например:

 DB::table('users')->where(function ($query) use ($activated) { $query->where('activated', '=', $activated); })->get(); 

Подробнее об этом здесь .

Если вы используете красноречие Laravel, вы также можете попробовать это.

 $result = self::select('*') ->with('user') ->where('subscriptionPlan', function($query) use($activated){ $query->where('activated', '=', $roleId); }) ->get(); 

Ответ @kajetons полностью функциональный.

Вы также можете передавать несколько переменных, передавая их следующим образом: use($var1, $var2)

 DB::table('users')->where(function ($query) use ($activated,$var2) { $query->where('activated', '=', $activated); $query->where('var2', '>', $var2); })->get(); 

Вы можете передавать переменные, используя это …

 $status =1; $info = JOBS::where(function($query) use ($status){ $query->where('status',$status); })->get(); print_r($info);