CakePHP:如何使用查找方法+ AJAX请求与可能空的搜索参数


CakePHP: How to use Find method + AJAX request with possibly empty search parameters

我正在使用CakePHP v2.3。在编辑页面上,我需要用搜索结果动态更新页面…

我正在从我的Views/Tests/admin_edit.php视图页面中的一个AJAX调用到我的QuestionsController.php中的特定操作。

下面是处理请求的操作(到目前为止):

public function admin_search() {
    if ($this->request->is('post')) {
        $searchdata = $this->request->data;
        $r = $this->Question->find('all', array('conditions' => array('Question.id' => $searchdata['id'])));
        echo json_encode($r);
        exit;
    }
}

它目前只返回id与用户输入的id匹配的问题,但完成的版本将搜索几个不同的字段。我知道如何通过向条件数组添加额外的键/值对来做到这一点。然而,我不知道如何使这些字段可选。如果用户输入了问题名,但没有输入id,或者反过来呢?是否有一个配置,使CakePHP将忽略任何空字段条件?

同样,是否有一种方法可以设置操作符,例如,我可以匹配子字符串或整数范围?更新:我在文档中发现了这个

我会先删除所有空条目。

假设您有一个$searchdata数组,其中有三个可选字段,其中一个为空。首先构建条件数组:

$searchdata = array("id" => 1, "name" => "", "type" => "foo");
$conditions = array('Question.id' => $searchdata['id'], 'Question.name' => $searchdata['name'], "Question.type" => $searchdata['type']);

(或者如果你想更花哨)

foreach($searchdata AS $key => $value) $conditions['Question.' . $key] = $value;

现在清理$conditions,去掉空值:

$conditions = array_filter($conditions);

的大作:

$r = $this->Question->find('all', array('conditions' => $conditions));

见http://3v4l.org/JN6PA