Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP-SQL查询连接_Php_Mysql_Sql_Cakephp_Cakephp 2.3 - Fatal编程技术网

CakePHP-SQL查询连接

CakePHP-SQL查询连接,php,mysql,sql,cakephp,cakephp-2.3,Php,Mysql,Sql,Cakephp,Cakephp 2.3,好的,所以我正处于困境中试图找到一种方法来实现这一点: 我有一个实时搜索(使用ajax),它允许用户从下拉列表中选择一个条件,然后输入一个与数据库中的值相匹配的值。这是非常琐碎的东西,在主模型的直接字段上,我没有任何问题 我有一个捐赠者模型/表格,它由ID、Name、姓氏等属性组成,但更重要的是它还有FK其他相关模型,如血型ID、捐赠者类型ID、,这些模型映射回各自的模型(血型和DonorType)。。这两个已经设置了关联,我已经超出了这一部分,因为我已经用关联的模型数据检索了捐赠者记录 这里是

好的,所以我正处于困境中试图找到一种方法来实现这一点:

我有一个实时搜索(使用ajax),它允许用户从下拉列表中选择一个条件,然后输入一个与数据库中的值相匹配的值。这是非常琐碎的东西,在主模型的直接字段上,我没有任何问题

我有一个捐赠者模型/表格,它由
ID、Name、姓氏等属性组成
,但更重要的是它还有
FK
其他相关模型,如
血型ID、捐赠者类型ID、
,这些模型映射回各自的模型(
血型和DonorType
)。。这两个已经设置了关联,我已经超出了这一部分,因为我已经用关联的模型数据检索了捐赠者记录

这里是搜索方法,希望能帮助你更好地理解我的问题

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 . "%'");
上述检查是否为post请求以及是否发送了数据。条件和用户输入用于构造查询

这就是我的问题所在。。(当用户从下拉列表中选择“按血型搜索”作为条件时)上述要求用户输入血型组的id,而不是+或-例如。。因此,如果输入为1(血型A+的id),结果将按预期返回。但我希望用户能够输入+

以下是该方法的其余部分:

$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
);
如果您能帮助我完成上面的解释,我们将不胜感激

简单地说:

if($criteria == 'blood_group_id')
    $conditions = array("BloodGroup.name LIKE" => $query.'%');
(假设bood_类型有“name”列)


另外,我建议您使用CakeDC搜索插件()。

如何填充您的条件dropwodn列表?@arilia它是这样硬编码的:`options'=>数组(‘id’=>‘按id’、‘姓名’=>‘按姓名’、‘血型’、‘血型’=>‘按供者类型’、‘年龄’=>‘按年龄’、‘性别’=>‘按性别’)`感谢您指出插件:)尽管查询仍然返回所有记录且未过滤..因为您的
if
错误,并且如果$criteria='block\u group\u id',PHP从不进入分页器->设置代码块。尝试重写整个if-logicOOPS-当然!!我怎么会错过这个!我现在觉得自己很愚蠢和无知,我的坏!!谢谢你的帮助经验教训-检查所有代码,尤其是最琐碎的代码。有时候我忽略了这些愚蠢的错误,莎莉亚,你能给我指一个好的教程,让我开始cakeDC搜索。到目前为止,我似乎还不能完全理解它是如何工作的,在不侮辱创建cakeDC search的开发人员的情况下,该文档似乎缺少正确的语法,除了非常简短之外,我还不理解它。我看过这个家伙的,总比什么都没有好,但还没有完全做到。也许最好的办法是你自己尝试一些代码,当你陷入困境时,你在这里发布另一个问题,以便提供到目前为止你已经尝试过的代码