2015-04-09 13 views
34

Ví dụ trong doc:Laravel Advanced Wheres cách chuyển biến thành hàm?

DB::table('users') 
     ->whereExists(function($query) 
     { 
      $query->select(DB::raw(1)) 
        ->from('orders') 
        ->whereRaw('orders.user_id = users.id'); 
     }) 
     ->get(); 

Nhưng nếu tôi cần phải sử dụng biến bên ngoài như thế:

  ->where('city_id', '=', $this->city->id) 
      ->where(function($query) 
       { 
        $query->where('name', 'LIKE', '%'.$searchQuery.'%') 
        ->orWhere('address', 'LIKE', '%'.$searchQuery.'%') 

       }) 

Để bây giờ tôi tạo ra tài sản mới và truy cập nó thông qua $this->, nhưng có bất kỳ thuận tiện hơn đường?

Trả lời

97

Bạn có thể chuyển các biến cần thiết từ phạm vi chính vào phần đóng bằng từ khóa use.

Ví dụ:

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

Thông tin thêm về here đó.

+1

Cảm ơn bạn, @kajetons –

+0

@kajetons này rất hữu ích –

+0

Cảm ơn @ kajetons.it đã giúp tôi rất nhiều – iCoders

3

Nếu bạn đang sử dụng Laravel eloquent bạn có thể thử điều này là tốt.

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

Câu trả lời @kajetons đầy đủ chức năng.

Bạn cũng có thể vượt qua nhiều biến bằng cách đi qua họ như: use($var1, $var2)

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

Bạn có thể vượt qua các biến sử dụng này ...

$status =1; 
$info = JOBS::where(function($query) use ($status){   
     $query->where('status',$status); 
     })->get(); 
print_r($info); 
Các vấn đề liên quan