2015-04-09 2 views
34

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

ответ

97

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

Например:

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

Подробнее об этом here.

+1

Спасибо, @kajetons –

+0

@kajetons Это было очень полезно –

+0

Спасибо @ kajetons.it помогли мне много – iCoders

3

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

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

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

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

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

Вы можете передать переменные с помощью этого ...

$status =1; 
$info = JOBS::where(function($query) use ($status){   
     $query->where('status',$status); 
     })->get(); 
print_r($info); 
Смежные вопросы