我和CakePHP差不多几个月了。这是我第一次尝试CakePhp Association。我假设我遵循几乎所有的指示,但我的模型似乎仍然不起作用。
这是简单的"用户"和"配置文件"模型。表结构:用户:
- 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
)
)
)
我想知道为什么没有显示"配置文件"数据。我已经在表格中手动添加了记录。
此外,如果我在用户控制器中尝试:$user = $this->User->Profile->find('all');
我收到以下错误:
调用非对象上的成员函数 find()
我的猜测是建立协会有问题。但不确定是什么把事情搞砸了。
我知道这是一个非常基本的问题,但即使在阅读了 10 到 15 个相关案例后,我似乎也没有找到答案。
任何帮助将不胜感激。
帮我一个忙,改变
class UserModel extends AppModel
自
class User extends AppModel
和
class ProfileModel extends AppModel
自
class Profile extends AppModel
并查看在用户控制器中执行$user = $this->User->Profile->find('all');
时是否有帮助。
另外,是
public $actsAs = array('Containable');
不
public $actAs = 'Containable';
不是actAs
.看看这是否有帮助。如果没有,了解您的蛋糕版本会很有帮助。
有关可包含的内容,请参阅此处,有关命名模型约定,请参阅此处。
如果你烘烤这个东西会让你的生活更轻松。
型号: 用户:
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);
}
}
在用户模型中添加以下行
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'));
在你的用户连接者添加这个
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');
问候