我正在尝试捕获某个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
}
}
}
问题是,如何获得$ findbyparameter?
谢谢!所有帮助将不胜感激!
答案 0 :(得分: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),看看你是否可以找到你搜索的短语。我相信它是在条件数组中传递的。
答案 1 :(得分:0)
也许您正在寻找自定义查找类型。自定义查找类型有两种状态:before
和after
。
在您设置条件之前,之后您将检查数据并在必要时进行修改。在这两种状态下,您都可以访问查询选项。
在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
的{{1}}密钥中。在这两种状态下,您都可以访问$query
。