我正在尝试在单个find()
期间删除联接。我想要的只是检索用户的订阅而不是与它们相关的所有表/字段。
我试过了
$subscriptions = $this->User->find('first',
array(
'fields' => array('User.subscriptions'),
'join' => array(''),
'conditions' =>
array(
'User.id'=> $userID
)
));
如果与joins
保持一致,将来可能会出现性能问题。
答案 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