2011-03-07 18 views
2

我有一個查詢找到從數據庫中院,與相關表中的一些額外數據一起的部分,具體如下:使用set ::提取物進行過濾的數據集

$homes_data = $this->Home->find('all',array(
    'conditions'=>$conditions, 
    'order'=>array('Home.mls_status ASC','Home.num DESC'), 
    'contain'=>array('Realtor.show_price','Realtor.show_address','HighlightImage.num') 
)) 

在這一點上,我倒要能夠使用set ::提取物過濾我的結果集,以消除任何結果,其中MLS號碼無效,在這種情況下,意味着不完全6個數字:

$homes_data = Set::extract('/Home/[mls=/^[[:digit:]]{6}$/]', $homes_data); 

與此問題是它失去了房地產經紀人和陣列的HighlightImage結果。所以:

是否有一個簡單的方法來重新這一點,以保持與有效的MLS有關的家庭數據?

失敗了,是否有辦法將條件「必須是數字和正好6位數的長度」放入SQL查詢中,最好是將它保持在整潔,習慣的CakePHP領域?

+1

你不能在查詢中過濾它嗎? – kaklon 2011-03-08 09:49:39

+0

@kaklon - 可能是個好主意。我不是100%確定的,但是如何在CakePHP中說出它。或者確實在MySQL中! – thesunneversets 2011-03-08 17:20:23

+0

嗯,在MySQL中:從mls regexp'^ [[:digit:]] {6} $'的家中選擇mls;作品。也許我可以通過Cake來沒有太多的痛苦... – thesunneversets 2011-03-08 17:31:31

回答

0

thesunneversets,

如果數據輸入過程中驗證是不是一種選擇,也許寫一個定製的模型功能被指示,讓您的控制器薄。 您應該能夠設置模型的驗證規則並在此自定義函數中手動使用驗證。

編輯0: 另一種方法可能是將現有數據映射到您最喜歡的一組值。

+0

不幸的是,由於我不明白的原因,在某些時候人們認爲在mls字段中放置非數字數據(例如「排除」或其他)似乎是可取的。我相信你是對的,一個更好的設計只會包含在這個字段中的有效數字,但是暫時我可能會在數據從數據庫中出來後檢查數據。儘管如此,我一定會研究消除這個領域內容的可能性,並且不會在將來讓廢話陷入其中;好主意! – thesunneversets 2011-03-07 23:48:53