模型关联不正确



我和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');

问候

最新更新