用cakephp从数据库中查找表连接值
我试图在cakephp的视图中访问用户名。我得到了一个userid,我需要使用它来查找存储在不同表中的用户名 我检索显示的表是messages,如下所示用cakephp从数据库中查找表连接值,php,mysql,cakephp,Php,Mysql,Cakephp,我试图在cakephp的视图中访问用户名。我得到了一个userid,我需要使用它来查找存储在不同表中的用户名 我检索显示的表是messages,如下所示 id | title | message | from_user | to_user | date 包含用户名的用户表 id | username | email | password 无论如何,我如何在消息中查找from_用户的用户名?我仍然习惯于蛋糕,所以我不知道如何在不实际编写查询的情况下生成“join”语句 我应该从控制器中的操
id | title | message | from_user | to_user | date
包含用户名的用户表
id | username | email | password
无论如何,我如何在消息中查找from_用户的用户名?我仍然习惯于蛋糕,所以我不知道如何在不实际编写查询的情况下生成“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');
您可以使用containable行为来检索该记录。我要做的是将行为添加到AppModel,并在AppModel中将recursive设置为-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'];
您还可以执行调试($message)代码>在视图或控制器中查看变量内部的确切内容及其结构
假设您的关系设置正确,这将检索与消息记录关联的FromUser.username字段
更多关于containable:(2.x)和(1.3)您必须在消息模型中重新定义您的关系:
public $belongsTo = array(
'Sender' => array(
'className' => 'User',
'foreignKey' => 'from_user'
),
'Recipient' => array(
'className' => 'User',
'foreignKey' => 'to_user'
)
);
如何访问该名称?我现在可以访问一些公共变量吗?我还是有点困惑。我是否将所有这些都放在appModel中?如果是这样,我是否要创建一个名为index的函数(这是我在控制器中使用的名称)。如果要将该行为添加到AppModel中,我的答案中的其余代码应该放在您的公共函数视图()中。
用您的消息->read()清除它们中的内容用上面的代码替换它。我唯一想不出的部分是如何处理使用$id的条件。因为这将查找id,而实际上没有使用任何变量,所以$id设置为什么?因为这个,我犯了一个错误。非常感谢您的帮助。公共函数视图($id)
中的$id
已从url传递。例如,/messages/view/4
将调用messages控制器::view(4)
如果没有得到想要的结果,请告诉我。