我和CakePHP在一起几个月了。这是我第一次尝试CakePhp协会。我假设我几乎都遵循了所有的指示,但我的模型似乎还没有起作用。
这很简单'用户'和'简介'模型。表结构:用户:
- id(主键)
- 姓名
资料:
- id(主键)
- 角色
- user_id(参考密钥)
模特:用户:
class UserModel extends AppModel{
var $name = 'User';
public $hasOne = array(
'Profile'
);
}
个人资料:
class ProfileModel extends AppModel{
var $name = 'Profile';
public $belongsTo = array('User'); }
控制器:用户:
lass UsersController extends AppController{
var $name = 'Users';
public $scaffold;
function index(){
$user = $this->User->find('all'); //HERE I expect to get User and Profiles data
pr($user);
}
}
个人资料:
class ProfilesController extends AppController{
var $name = 'Profiles';
public $scaffold;
function index(){
$profile = $this->Profile->find('all');
pr($profile);
}
}
如果我运行用户:/ localhost / test_php_apps / users /我得到:
Array (
[0] => Array
(
[User] => Array
(
[id] => 1
[name] => rohini
)
)
)
我想知道为什么'简介'数据未显示。我在表格中手动添加了记录。
此外,如果我尝试使用UsersController:$user = $this->User->Profile->find('all');
,我会收到以下错误:
在非对象上调用成员函数find()
我的猜测是设置关联有问题。但不确定是什么搞乱了。
我知道这是一个非常基本的问题,但即使在阅读了10到15个相关案例后,我似乎也找不到答案。
非常感谢任何帮助。
答案 0 :(得分:0)
帮我一个忙,改变
class UserModel extends AppModel
到
class User extends AppModel
和
class ProfileModel extends AppModel
到
class Profile extends AppModel
并查看在UsersController中执行$user = $this->User->Profile->find('all');
时是否有帮助。
另外,是
public $actsAs = array('Containable');
不
public $actAs = 'Containable';
不是actAs
。看看是否有帮助。如果没有,了解你的蛋糕版本会很有帮助。
答案 1 :(得分:0)
在您的usermodel
中添加以下行public $useTable = 'YOUR USERTABLENAME';
并更改
public $hasOne = array(
'Profile'
);
到public $hasOne = 'Profile';
添加相同的内容。
public $useTable = 'YOUR PROFILETABLENAME';
并更改
public $belongsTo = array('User');
到
public $belongsTo = array('User' => array('className' => 'User',
'foreignKey' => 'user_id'));
在您的userscontontroller中添加此
public $uses = array('User','Profile');
通常在尝试查询时应该可以正常工作
$u = $this->User->find('all',array('contain' => array('Profile'));
或
$u = $this->User->find('all',array('recursive' => 2));
但如果你只写,它也应该有效:
$u $this->User->find('all');
问候
答案 2 :(得分:0)
如果你烘烤这件事会让你的生活更轻松。
模特:用户:
class User extends AppModel{
var $name = 'User';
public $hasMany = array(
'Profile'=>array(
'className' => 'Profile',
'foreignKey' => 'user_id',)
);
}
资料:
class Profile extends AppModel{
var $name = 'Profile';
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
)
);
}
控制器:用户:
class UsersController extends AppController{
var $name = 'User';
public function index(){
$users = $this->User->find('all');
var_dump($users);
}
}
控制器配置文件:
class ProfilesController extends AppController{
var $name = 'Profile';
public function index(){
$user_id = 2;
$users = $this->Profile->find('all', array('conditions'=>array('Profile.user_id'=>$user_id)));
var_dump($users);
}
}