Пример в документе:
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
ключевого слова 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);