好了,我是在泡菜试图找出如何做到这一点的方式:CakePHP的 - SQL查询加入
我有一个实时搜索(使用AJAX),它允许用户从选择标准一个下拉列表,然后输入一个值,该值将与数据库中的值匹配。这是相当平凡的东西,在主模型的直接领域,我没有任何问题。
我有一个供体模型/表它由属性,诸如ID, Name, Surname etc
的,但更重要的是它也有其他相关联的模型如blood_group_id, donor_type_id,
其映射回相应的模型(BloodGroup and DonorType
)..这两个已经被设定的FK
与协会和我超出了这一部分,因为我已经检索与相关模型数据的捐助者记录。
下面是搜索方法,希望能帮助你理解我的问题更好。
public function search() {
if($this->request->is('post')){
if(!empty($this->request->data)){
$criteria = $this->request->data['criteria'];
$query = $this->request->data['query'];
$conditions = array("Donor." .$criteria. " LIKE '". $query . "%'");
上述内容将检查是否发布了发布请求以及是否发送了数据。标准和用户输入用于构建查询..
这是我的问题出现的地方..(当用户选择搜索按血型,作为从下拉条件)上面预计用户输入例如blood_group的id,而不是A +或A-。因此,如果输入是1(血型A +的ID),则结果按预期返回。但我希望用户能够进入A + ...
这里是方法的其余部分:
$this->Paginator->settings = array(
'conditions' => $conditions,
'limit' => 2
);
$donors = $this->Paginator->paginate('Donor');
$this->set('donors', $donors);
$this->beforeRender();
$this->layout= 'ajax';
}
}
}
我已经试过这种方法,建立使用型号名称的条件,如
if($criteria == 'blood_group_id'){
$conditions = array("BloodGroup.id" . " LIKE '". $query . "%'");
}elseif($criteria == 'donor_type_id'){
$conditions = array("DonorType.id" . " LIKE '". $query . "%'");
}else{
$this->Paginator->settings = array(
'conditions' => $conditions,
'limit' => 2
);
}
但是,这会返回所有记录,而不考虑输入。
我也试过,没有运气
$settings = array(
'joins' => array(
'table' => 'blood_groups',
'alias' => 'BloodGroup',
'type' => 'LEFT',
'conditions' => array(
"BloodGroup.id" => "Donor.blood_group_id",
"AND" => $conditions
)
),
'limit'=> 2
);
如何完成我上面所解释的,将极大地意识到任何帮助改变了分页程序的设置!
你如何填充你的标准dropwodn列表? – arilia
@arilia它被硬编码如下:''options'=> array( 'id'=>'按ID', 'name'=>'按姓名', 'blood_group_id'=>'按血型分类' , 'type'=>'按捐助者类型', 'age'=>'按年龄', 'gender'=>'按性别' )' – LogixMaster