我在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
。
那麼,這裏有什麼問題?我該怎麼辦 ?請幫助我,這是一種緊急情況。
謝謝。
你可能想看看https://github.com/CakeDC/search並保存自己的30行野生代碼:) – mark
是的,我試過了,但是對於我認爲的Cake 2.5+,它給出了我錯了。這就是爲什麼我現在正在嘗試這個。@ mark –
好吧,它也應該和cake2.3一起工作,不過你應該把你的代碼升級到當前的master。這是強烈建議。 – mark