0

我正在尝试捕获某个 findBy 调用(使用 afterFind),其中:

如果 $results 为空(或者您要查找的值不存在),但在另一个表上找到了参数值,则它将修改 $results 为有效

一些控制器动作得到了这个:

$this->User->findByUsername("Bingo"); // yes, username Bingo doesnt exist on users table

用户型号:

function afterFind($results, $primary){
    if(empty($results)) {
        if(in_array($findbyparameter, array("Bingo", "Bingo1", "Bingo2"))) {
            // modify $results
        }
    }
}

问题是,我如何获得 $findby 参数?

谢谢!所有帮助将不胜感激!

4

2 回答 2

0

我没有使用这些便捷方法,但您可以像这样将变量作为 Model 属性传递:

//where you search 
$this->User->searchPhrase = "Bingo";
findByUsername($this->User->searchPhrase);

//Model
function afterFind($results, $primary){
    if(empty($results)) {
        if(in_array($this->searchPhrase, array("Bingo", "Bingo1", "Bingo2"))) {
            // modify $results
        }
    }
}

这不是最漂亮的方法,但我想它会起作用。尝试在 afterFind 方法中 print_r($this) 看看你是否可以在某个地方找到你搜索的短语。我相信它是在条件数组中传递的。

于 2012-09-23T22:19:25.077 回答
0

也许您正在寻找自定义查找类型。自定义查找类型有两种状态:beforeafter.

在之前您将设置您的条件,在之后您将检查您的数据并在必要时进行修改。在这两个州,您都可以访问查询选项。

设置自定义查找在 1.x 和 2.x 中略有不同(您没有提到您使用的是哪个版本),因此您可以在书中查找具体内容。

简而言之,您可以将您的查找类型添加到$findMethods模型的属性中,然后将相应的方法名称添加到您的模型中。假设您将自定义查找类型称为“byUsername”

protected function _findByUsername($state, $query, $results = array()) {
    if ($state === 'before') {
        // add your condition to the query, 
        return $query;
    } elseif ($state === 'after') {
        // modify $results if you need to
        return $results;
    }
}

你会通过调用它$this->User->find('byUsername', array('username' => $username));

$query您将拥有密钥“用户名”,您可以将其添加conditions$query. 在这两个州,您都可以访问$query['username'].

于 2012-09-23T22:28:13.270 回答