2012-11-05 26 views
3

我開始使用Laravel框架,並且我遇到了流暢查詢生成器的問題。在where條件下,如果我正在使用原始值或Input::get(),它會檢索結果並正確執行,但是當我使用分配的變量時,它會顯示「未定義的變量」錯誤。流利的查詢生成器中的未定義變量

$properties = Listing::where(function($query) 
{ 
    if (Input::has('property-type')) $query->where('property_type', '=',Input::get('property-type')); 
})->get(); 

它工作正常,但如果我不

$pt=Input::get('property-type'); 
$properties = Listing::where(function($query) 
{ 
    if ($pt!='') $query->where('property_type', '=',$pt); 
})->get(); 

則返回錯誤

Undefined variable: pt 

如果我打印變量 「$ PT」 它包含的價值。

我只想使用變量值,因爲我應該將這些值從控制器傳遞給模型作爲參數,並在模型函數中構建查詢。難道我做錯了什麼?在查詢執行之前未分配變量嗎?請,誰能幫我解決這個問題?

回答

0

您與變量掙扎的原因是因爲它超出了匿名函數的範圍。

我不擔心將變量傳遞給模型來構造查詢,只需使用真棒Input類方法。

+2

感謝你回答..是的。僅使用「Input」類方法就足夠了。但我用PHP的「使用」功能來解決這個問題。像Listing :: where(function($ query)use($ pt){..}) – viji

2

感謝@viji評論,你可以利用PHP use關鍵字做到這一點:

$var = 5; 
$orgs = app('db')->table('t') 
     ->where('status', '=', '1') 
     // Sending $var to anonymous function 
     ->where(function ($query) use ($var) { 
      $query->where('orgs.name', 'like', "%$var%"); 
     })->select('id') 
     ->get(); 
相關問題