我正在尝试在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');
答案 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)