2017-07-24 41 views
0

在這裏幾天進入PHP,我有一個讓我真的難倒了。我正在使用Propel2根據用戶選擇的過濾器從數據庫中檢索行。最終,我希望能夠有很多用戶可以選擇的過濾器,然後生成一個自定義Propel2調用來檢索記錄。由於指數數量的可能查詢,我無法使用If/Then。然而,下面我的例子的每個方法都失敗了。Propel2使用函數構建查詢,然後調用查找

$dealfinder = DealsQuery::create()->filterByStillvalid(1)->orderByInception('DESC'); 

if(isset($dept)) { 
    $dealfinder->filterByCategory($dept); 
} 

if (isset($early)) { 
    $oneHourAgo = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))- $dealDelay); 
    $dealfinder->filterByInception(array('max' => $oneHourAgo)); 
} 

$dealfinder->paginate($page = $pageNum, $maxPerPage = $maxColumn*$maxRow); 

以上的回報代碼:

deals.stillvalid=:p1, deals.inception<=:p1 

這可能只是一個PHP函數鏈語法的東西,所以這裏是一個工作Propel2調用會是什麼樣子:

$dealfinder = DealsQuery::create()->filterByStillvalid(1)->filterByCategory($dept) 
->orderByInception('DESC')->filterByInception(array('max' => $oneHourAgo)) 
->paginate($page = $pageNum, $maxPerPage = $maxColumn*$maxRow); 

我將非常感謝幫助。謝謝。

+0

對於什麼是值得的,我用我有限的知識採取了許多方法。這是我在這裏模擬的一個方法,他說他爲他工作:https://stackoverflow.com/questions/36401454/dynamic-table-name-in-propel-query/36524417 – ZoomStop

回答

0

我有過類似的問題,並最終移動if語句內的初始查詢。這可能不是最好的解決方案,直到清理乾淨,但它爲我完成了訣竅。

if(isset($dept)) { 
    $dealfinder = DealsQuery::create() 
     ->filterByCategory($dept) 
     ->filterByStillvalid(1) 
     ->orderByInception('DESC'); 
} 

if (isset($early)) { 
    $oneHourAgo = date('Y-m-d H:i:s', strtotime(date('Y-m-d H:i:s'))-$dealDelay); 

    $dealfinder = DealsQuery::create() 
     ->filterByInception(array('max' => $oneHourAgo)) 
     ->filterByStillvalid(1) 
     ->orderByInception('DESC'); 
} 

$dealfinder->paginate($page = $pageNum, $maxPerPage = $maxColumn*$maxRow); 
+0

謝謝你的答覆!這確實很好。我結束了使用稍微不同的方法,我沒有意識到我可以傳遞變量(和數組)作爲參數。因此,例如這個工程: - > orderByInception($ inceptionFilter);' – ZoomStop