2012-02-18 53 views
0

我想創建一個高級搜索,這樣的事情:高級搜索在模型(MVC)

  • 文本框:查找
  • 下拉:姓名,位置或電話
  • 下拉:排序搜索通過ASC或十二月
  • 下拉:按名稱排序,位置或電話
  • 下拉:日期間的搜索(如果選擇)

在模型的函數中添加這些參數的正確方法是什麼?

我已經想出了這個解決方案:

class ShopsModel extends Model { 

    findBy($find, $searchBy, $order, $sort, $betweenDate) { 
    // some MySQL query here... 
    } 

} 

編輯:我講的變量 - findBy($find, $searchBy, $order, $sort, $betweenDate) - 我需要所有這些參數或者是有替代解決方案?

+0

您正在使用什麼樣的框架?另外,你在這裏問的問題確實不清楚。 – 2012-02-18 00:13:45

+0

@BenLee我正在談論變量 - 'findBy($ find,$ searchBy,$ order,$ sort,$ betweenDate)' - 我需要所有這些參數還是有其他解決方案? – 2012-02-18 00:15:26

+0

class vars,可能不在模型中。您可以擁有一個後處理程序,通過它們的值來分配類變量,然後使用它們來構造您的請求。至少這樣你每次更新搜索代碼時都不需要修改方法參數。只是一個選擇。 – 2012-02-18 00:16:46

回答

1

您的解決方案似乎沒有問題。但你也可以使用Decorator模式,所以你可以做下面的查詢:

$shops = new ShopsModel(); 
$results = $shops->search('name', 'Tadeck') 
    ->order_by('name', 'asc') 
    ->between_dates('2012-02-01', '2012-03-14') 
    ->fetch_all(); 
+0

+1,那真是個好主意。我想我應該只有'ShopsSearchModel'作爲搜索部分。 'ShopsModel'進行編輯和刪除?把所有這一切放在一個模型中 - 它會太大。你怎麼看? – 2012-02-18 00:22:55

+1

@ user791022:這取決於。我寧願停留在使用單一模型閱讀,寫作和刪除。此外,這些方法通常是查詢構建器的一部分,您可能不需要該模型。但是無論您選擇什麼,最重要的是在整個應用程序中保持一致。 – Tadeck 2012-02-18 00:27:11