0

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

我绝对决心使用以下内容来查找所有者拥有的所有地块,其中包含一个 bean。

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

但是,它给了我 SQL WHEREPlot.所有者= '15' ANDPlot .bean_id= '> 0'

这表明这可能是不可能的,但我不认为这是确定的。(可能,甚至与 2.2 相关?)它可能是,所以问题有两个方面:

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

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

1 回答 1

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 更好。

于 2012-08-24T17:51:26.343 回答