我正在研究蛋糕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)));
感谢
希夫
答案 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')
));