2015-09-28 95 views
0

我有一個在Laravel框架上運行的跟蹤系統。跟蹤系統允許用戶使用JSON格式的結構從網站輸入他們的跟蹤查詢,然後將結果傳遞給服務器進行處理。然後,服務器將根據輸入中給出的JSON結構查詢來自數據庫的所有相關數據。當前代碼結構是有點多餘象下面這樣:使用查詢生成器構建動態laravel數據庫查詢

if($a == true) 
{ 
    $data = DB::table('table') 
    ->select('item1') 
    ->where('item2', '=', $a) 
    ->get(); 

    if($limit !== null) 
    { 
     $data = DB::table('table') 
     ->select('item1') 
     ->where('item2', '=', $a) 
     ->take($limit) 
     ->get();    
    }  
} 
/*the code goes on and on*/ 

注意,在上面的示例代碼,是否有任何辦法可以做,以減少代碼的冗餘部分?就像我在腦海裏說的那樣:

public function process() 
{ 
    $data = DB::table('table') 
    ->select('item1') 
    $a == true ? "->where('item2', '=', $a)" : ''; 
    $limit !== null ? "->take($limit)" : ''; 
    ->get(); 
} 

所以,你可以看到縮短的代碼和長版本完全一樣。我知道我的想法在真實場景中是不可用的,但是有沒有類似的方法可以解決我腦海中的問題?

在此先感謝

回答

1

的生成器生成的查詢,但要等到運行get方法中的數據不被取。嘗試:

​​

limit相同take。這只是一個別名。

0

我通常用它做是

$query = \DB::table('table'); 
$query->select('item1'); //i prefer $query->select(\DB::raw('table.item1 AS item1')); 
if($a) 
{ 
    $query->where('item2', '=', $a); 
} 

if($limit) 
{ 
    $query->take($limit); 
} 

$data = $query->get(); 

這樣沿着您可以根據額外的濾鏡來你要添加的查詢進行調整的方式。