Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用cakephp从数据库中查找表连接值_Php_Mysql_Cakephp - Fatal编程技术网

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

用cakephp从数据库中查找表连接值,php,mysql,cakephp,Php,Mysql,Cakephp,我试图在cakephp的视图中访问用户名。我得到了一个userid,我需要使用它来查找存储在不同表中的用户名 我检索显示的表是messages,如下所示 id | title | message | from_user | to_user | date 包含用户名的用户表 id | username | email | password 无论如何,我如何在消息中查找from_用户的用户名?我仍然习惯于蛋糕,所以我不知道如何在不实际编写查询的情况下生成“join”语句 我应该从控制器中的操

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

我检索显示的表是messages,如下所示

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)
如果没有得到想要的结果,请告诉我。