2012-08-24 38 views
0

我們有可以種植到圖中的圖和豆。CakePHP magic findBy方法比較

我絕對決心用以下方法找到所有者擁有的地塊,並在裏面放置一個bean。

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

然而,它給我的SQL WHERE情節.所有者= '15' AND情節. 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

我不明白怎麼會是可能的魔術方法(可能與DboSource ::表達工作(),但如果用戶輸入你必須自己清理動作)。但是,您可以在模型中創建一個輔助方法。

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

+0

可悲的是,似乎真的沒有辦法做我想做的。 $ ds->沒有工作,但感謝您的努力。至於定義功能,它消除了我的需要。 :P我會繼續用find()來看看是否有人說什麼。非常感謝。 –

+0

不完全消除需要。它使你的代碼更加可重用和可測試。更胖的模型,更瘦的控制器。 – tigrang