使用cakephp查找数据库中的表连接值

时间:2012-08-05 01:00:53

标签: php mysql cakephp

我正在尝试在cakephp的视图中访问用户的名字。我有一个用户ID,我需要用它来查找存储在不同表中的用户名。

我正在检索的表格是消息,如下所示

id |  title | message | from_user  | to_user | date

包含用户名

的users表
id | username | email | password

无论如何,如何在邮件中查找from_user的用户名?我仍然习惯于蛋糕,所以我不知道如何在没有实际编写查询的情况下制作“join”语句。

我应该从控制器中的操作发送用户名还是可以从视图中执行此操作?

编辑 - 我让它工作

这是我的索引功能

public function index() {

  $options['joins'] = array(
    array('table' => 'Users',
        'type' => 'inner',
            'fields' => array('user.username'),
        'conditions' => array(
            'Message.from_user = User.id',
            'alias' => 'user_id')
    )
);

$message = $this->Message->find('all', $options);

$this->set('messages', $message);
}

我将此添加到我的消息控制器,现在显示用户名,但仅适用于第一条消息。所有其他人都是空白。

public $belongsTo = array('User');

2 个答案:

答案 0 :(得分:1)

您必须在消息模型中重新定义您的关系:

public $belongsTo = array(
    'Sender' => array(
        'className' => 'User',
        'foreignKey' => 'from_user'
    ),
    'Recipient' => array(
        'className' => 'User',
        'foreignKey' => 'to_user'
    )
);

答案 1 :(得分:0)

您可以使用可包含的行为来检索该记录。我所做的是将行为添加到AppModel并在AppModel中将递归设置为-1。

然后您的read()电话会变成

public function view($id) {
    $message = $this->Message->find('first', array(
        'conditions' => array('Message.id' => $id),
        'contain' => array(
            'FromUser' => array('fields' => array('FromUser.username')),
        ),
    ));
    $this->set('message', $message'); // or just $this->set(compact('message'));
}

在您看来:

$message['FromUser']['username'];

您也可以在视图或控制器中执行debug($message);,以查看变量内部的确切内容及其结构。

假设您已正确设置关系,则应检索与邮件记录关联的FromUser.username字段。

有关可容纳的更多内容:http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html(2.x)和http://book.cakephp.org/view/1323/Containable(1.3)