CakePHP魔术findBy方法进行比较

时间:2012-08-24 16:58:09

标签: cakephp php magic-methods cakephp-2.2

我们有可以种植到地块中的地块和豆类。

我绝对决定使用以下内容查找所有者拥有的所有图表,其中包含一个bean。

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

但是,它为我提供了SQL WHERE Plot .所有者= '15' AND Plot . bean_id = '> 0'

This suggests it may be impossible,但我觉得它不是确定的。 (可能,甚至相关的是2.2?)它可能是,所以问题是双重的:

如何从findBy中获得我想要的东西,如果我真的不能,我怎么能避免使用比以下更少的代码,我可以确认它有效?

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

1 个答案:

答案 0 :(得分:1)

我看不出魔术方法怎么可能(可以使用DboSource :: expression()但是如果它的用户输入你必须自己清理它)。但是,您可以在模型中创建辅助方法。

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。