0

我在 cakephp 2 应用程序中有 3 个表:

用户

  • ID
  • 电子邮件

简介

  • ID
  • 姓名
  • 用户身份

论文

  • ID
  • 标题
  • 用户身份

我将展示这个:

------------------------------------------------------------------
| user->ID |    profile -> name   | paper -> ID | paper -> title |
------------------------------------------------------------------
|   123    |        jack          |      12     |      test1     |
------------------------------------------------------------------
|   125    |        jonn          |      15     |     mypaper    |
------------------------------------------------------------------
etc.

也许用户没有任何纸张。
用户拥有一个个人资料。
用户有很多纸。

我如何在 users_controller 的操作中做到这一点?

4

1 回答 1

1

您只需要在各个模型中指定模型关联。将以下文件保存在 app/Model 文件夹中。

//User Model: User.php
App::uses('AppModel', 'Model');
class User extends AppModel
{
public $name = 'User';
public $useTable = 'users';    
public $primaryKey = 'id';
public $hasOne = array('Profile' => array(
                                          'className' => 'Profile',
                                          'foreignKey' => 'user_id'
                                          )
                       );
public $hasMany = array('Paper' => array(
                                         'className' => 'Paper',
                                         'foreignKey' => 'user_id'
                                         )
                        );
}

//Profile Model: Profile.php
App::uses('AppModel', 'Model');
class Profile extends AppModel
{
public $name = 'Profile';
public $useTable = 'profiles';    
public $primaryKey = 'id';
public $belongsTo = array('User' => array(
                                           'className' => 'User',
                                           'foreignKey' => 'user_id'
                                           )
                          );
}

//Paper Model: Paper.php
App::uses('AppModel', 'Model');
class Paper extends AppModel
{
public $name = 'Paper';
public $useTable = 'papers';    
public $primaryKey = 'id';
public $belongsTo = array('User' => array(
                                           'className' => 'User',
                                           'foreignKey' => 'user_id'
                                           )
                          );
}

您可以通过一个查询轻松找到用户详细信息及其个人资料详细信息以及所有纸张信息:

$result = $this->User->find('all', array('conditions' => array()));

如果您想通过论文的 user_id 找出用户的个人资料详细信息,那么您应该编写以下内容:

$result = $this->User->Paper('all', array('conditions' => array('Paper.user_id' => $user_id),
                                'recursive' => '2'));

您可以使用以下命令检查输出:pr($result);die;

于 2012-08-27T04:22:27.070 回答