2014-07-10 50 views
0

我在CakePHP中遇到了searching特性的大問題。其實,我認爲CakePHP在這裏不是問題,問題是邏輯。我想我沒有找到完美的邏輯。CakePHP中的複雜搜索無法正常工作

我正在使用CakePHP 2.3.6。我有一些Models,這是由hasMany協會相關。現在

,我的搜索形式有以下字段:

Name, Gender, Country, Experience, Skills, Subject, Result. 

讓我們假設他們都是文本框。

現在,我想要的是,當用戶使用這些標準搜索用戶時,所有這些標準都必須全部填滿。我的意思是,我想要的用戶是Name="Max" AND Gender="Male" AND Country="USA" AND Experience="5 Years" AND Skills="Programming" AND Subject="CSE" AND Result="4.51"

這裏,

Model1: 

Name, Gender, Country,......... 

Model2: 

Skills, Subject, Result,........... 

Model3: 

Exprience, ....... 

而且,

Model1 hasMany Model2 
Model1 hasMany Model3 

所以,我試過到目前爲止:

if($this->request->is('post')){ 
    $data=$this->request->data; 
    if(!empty($data['skills']) || !empty($data['subject']) || !empty($data['result'])){ 
     $education=array(); 
     if(!empty($data['skills'])) 
     $education['AND']['Model2.skills']=$data['skills']; 
     if(!empty($data['subject'])) 
     $education['AND']['Model2.subject']=$data['subject']; 
     if(!empty($data['result'])) 
     $education['AND']['Model2.result >= ']=$data['result']; 
     $bind['Model2']['conditions']=$education; 
     $bind['Model2']['fields']=array('Model2.result','Model2.skills','Model2.subject'); 
    } 
    if(!empty($data['experience'])){ 
     $bind['Model3']['conditions']['Model3.experience']=$data['experience']; 
     $bind['Model3']['fields']=array('Model3.experience'); 
    } 
    $personal=array(); 
    if(!empty($data['name'])) 
     $personal['AND']['Model1.name']=$data['name']; 
    if(!empty($data['gender'])) 
     $personal['AND']['Model1.gender']=$data['gender']; 
    if(!empty($data['district'])) 
     $personal['AND']['Model1.country']=$data['country']; 
    $this->Model1->bindModel(array('hasMany'=>$bind)); 
    $this->paginate['Model1']['conditions']=$personal; 
    $this->paginate['Model1']['fields']=array('Model1.id','Model1.name'); 
    $result=$this->paginate('Model1'); 
} 

它給了我一些數據不相關的搜索,意思是說,我希望所有的條件都滿足,不會有OR,一切都會是ANDed

那麼,這裏有什麼問題?我該怎麼辦 ?請幫助我,這是一種緊急情況。

謝謝。

+1

你可能想看看https://github.com/CakeDC/search並保存自己的30行野生代碼:) – mark

+0

是的,我試過了,但是對於我認爲的Cake 2.5+,它給出了我錯了。這就是爲什麼我現在正在嘗試這個。@ mark –

+0

好吧,它也應該和cake2.3一起工作,不過你應該把你的代碼升級到當前的master。這是強烈建議。 – mark

回答

0

好吧,

我想我終於得到了解決這個問題。我想我應該在這裏使用JOIN query for hasMany association