关联cakephp有什么问题

时间:2014-02-19 09:18:47

标签: cakephp associations


我正在研究蛋糕php并且我与用户和user_details表有关联,当我注册时它的工作正常。它在两个表上发布数据,但是当我重定向到配置文件页面时,它会抛出userDetail数组的错误。当我打印那个info数组时,我只得到一个数组而不是两个数组,一个是User,另一个是UserDetail。它在我的本地机器上工作正常,但在服务器上没有工作,但是当我使用recursive=>1而不是它的工作时。请告诉我这里有什么问题。

查询

$userInfo = $this->User->find('first',array('conditions'=>array('User.id'=>$userId)));

当我传递递归而不是它的作用

$userInfo = $this->User->find('first',array('recursive'=>1,'conditions'=>array('User.id'=>$userId)));

感谢
希夫

2 个答案:

答案 0 :(得分:1)

请使用Containable行为。它比recursive变量更直观,更干净。您可以在AppModel(或特定模型,如果您不希望在所有这些行为中使用此行为)中添加此内容:

public $actsAs = array('Containable');

然后,在你的发现中:

$userInfo = $this->User->find('first',array(
    'conditions'=>array(
        'User.id'=> $userId
    ),
    'contain' => array('UserDetail')
));

如果您已声明自己的关联,则会为User

UserDetail检索User {{1}}

答案 1 :(得分:0)

如果您在User上查找时总是想要获取UserDetail,请将$ recursive属性添加到User模型中:

public $recursive = 1;

但是,建议不要使用上述内容,因此应在AppModel中将$recursive设置为-1。这是因为Model::find()通常只应从单个模型而不是所有相关模型中获取数据。例如。如果您的User模型与UserDetail和UserRole模型相关,则如果$ recursive不等于-1,则将获取所有这些模型中的数据。这会降低您的应用速度。

当您确实需要问题中的相关模型数据时,请使用containable behavior,如下所示:

$userInfo = $this->User->find('first', array(
  'conditions' => array('User.id'=>$userId),
  'contain' => array('UserDetail')
));