0

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

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

id |  title | message | from_user  | to_user | date

包含用户名的用户表

id | username | email | password

无论如何,我怎样才能在消息中查找 from_user 的用户名?我仍然习惯于蛋糕,所以我不知道如何在不实际编写查询的情况下做出“加入”语句。

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

编辑-我让它工作

这是我现在的索引功能

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');
4

2 回答 2

1

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

public $belongsTo = array(
    'Sender' => array(
        'className' => 'User',
        'foreignKey' => 'from_user'
    ),
    'Recipient' => array(
        'className' => 'User',
        'foreignKey' => 'to_user'
    )
);
于 2012-08-06T06:51:46.017 回答
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 )

于 2012-08-05T01:18:17.653 回答