CakePHP magic findBy比较法

CakePHP magic findBy比较法,cakephp,php,magic-methods,cakephp-2.2,Cakephp,Php,Magic Methods,Cakephp 2.2,我们有小块地和豆子可以种在小块地里 我下定决心要用下面的方法来找到所有拥有者的地块,里面有一个豆子 $plots=$this->Plot->findAllByOwnerAndBean_id(uid,'>0') 但是,它给了我SQLWHEREPlotowner='15'和Plotbean\u id='>0' ,但我觉得这不是决定性的。(可能,甚至与2.2相关?)可能是这样,因此问题有两个方面: 我如何从findBy中得到我想要的,如果我真的不能,我如何避免比下面更少的代码,我可以确认这些代码是有效

我们有小块地和豆子可以种在小块地里

我下定决心要用下面的方法来找到所有拥有者的地块,里面有一个豆子

$plots=$this->Plot->findAllByOwnerAndBean_id(uid,'>0')

但是,它给了我SQL
WHERE
Plot
owner
='15'和
Plot
bean\u id
='>0'

,但我觉得这不是决定性的。(可能,甚至与2.2相关?)可能是这样,因此问题有两个方面:

我如何从findBy中得到我想要的,如果我真的不能,我如何避免比下面更少的代码,我可以确认这些代码是有效的

$plots = $this->Plot->find('all', array(
     'conditions' => array(
        'owner'     => uid,
        'bean_id >' => 0
      )
    ));

我不知道如何使用神奇的方法(可以与DboSource::expression()一起使用,但如果它的用户输入,您必须自己清理)。但是,您可以在模型中创建一个helper方法

class Plot extends AppModel {

    public function findAllByOwnerAndBeanId($owner, $beanId) {
        return $this->find('all', array(
            'conditions' => array(
                'owner'     => $owner,
                'bean_id >' => $beanId,
             ),
        ));
    }

}
编辑:您可以尝试以下操作,但请注意,它没有经过测试

$ds = $this->Plot->getDataSource();
$plots = $this->Plot->findAllByOwnerAndBean_id($uid, $ds->expression('> ' . intval($userInputtedBeanId)));

对于
Sanitize::escape()
可能比intval更好。

遗憾的是,似乎真的没有办法做我想做的事情$ds->不起作用,但感谢您的努力。至于定义函数,它消除了我对此的需要:P我将继续查找()并查看是否还有人要说。非常感谢。这并不能完全消除这种需要。它使您的代码更具可重用性和可测试性。更胖的模型,更瘦的控制器。