使用find(cakePHP)暂时删除联接

时间:2011-04-27 02:31:19

标签: php database cakephp controller

我正在尝试在单个find()期间删除联接。我想要的只是检索用户的订阅而不是与它们相关的所有表/字段。

我试过了

$subscriptions = $this->User->find('first', 
    array(
        'fields'     => array('User.subscriptions'),
        'join'       => array(''),
        'conditions' => 
            array(
                'User.id'=> $userID
            )
));

如果与joins保持一致,将来可能会出现性能问题。

2 个答案:

答案 0 :(得分:4)

尝试添加递归值-1:

$subscriptions = $this->User->find('first', array(
    'fields' => array('User.subscriptions'),
    'join' => array(''),
    'conditions' => array(
        'User.id' => $userID
    ),
    'recursive' => -1
));

-1递归值将使查询仅从User表中检索没有任何连接的字段。

答案 1 :(得分:3)

您应该使用可包含的行为。

在您的用户模型(或AppModel)中添加以下内容:

var $actsAs = array('Containable');

然后,在你的控制器上:

$this->User->contain();
$subscriptions = $this->User->find('first', array(
    'fields' => array('User.subscriptions'),
    'conditions' => array(
        'User.id' => $userID
    ),
));

CakePHP书籍有更多文档http://book.cakephp.org/view/1323/Containable