CakePHP无法链接模型中2个表中的数据

CakePHP无法链接模型中2个表中的数据,php,mysql,cakephp,Php,Mysql,Cakephp,我在使用cakePHP链接聊天视图中表用户的名字等数据时遇到问题。下面是我的代码,无论我做什么,脚本都不会从chats数据库表中选择用户名来显示名字。我一定是在监督什么,但我思考的这个循环让我有些头疼。有人能帮我脱离这个圈子吗 User.php <?php class User extends AppModel { public $hasMany = array( 'Ondutylog', 'Chat' ); } ?> 您需要

我在使用cakePHP链接聊天视图中表用户的名字等数据时遇到问题。下面是我的代码,无论我做什么,脚本都不会从chats数据库表中选择用户名来显示名字。我一定是在监督什么,但我思考的这个循环让我有些头疼。有人能帮我脱离这个圈子吗

User.php

<?php
class User extends AppModel {
    public $hasMany = array(
        'Ondutylog',
        'Chat'
        );
}
?>

您需要在控制器中为模型充电

class ChatsController extends AppController {

    public function view() {
        $this->loadModel('User');
        $this->loadModel('Chat');
        $chats = $this->Chat->find('all', array(
            'order' => array('id' => 'ASC'),
            'recursive' => -1
            ));
        $this->set('chats', $chats);
        $id = $chats['Chat']['user_id'];
        $userdetails = $this->Chat->User->find('first', array(
            'conditions' => array(
                'id' => $id
                ),
            recursive => -1
            ));
       $this->set(compact('userDetails'));  
    }
}
改变

您应该设置视图变量,而不是返回信息

但是,为什么要对它进行单独的查询,而不是仅使用“recursive”=>0,它将通过表联接获取关联的用户记录,并且您可以在视图中使用$chat['user']['firstname']


还可以去掉var$uses=array'User','Chat';。不需要$此->聊天已可用,并且用户模型通过关联作为$this->聊天->用户访问,正如您已经做的那样

我找到了解决办法,而且比我自己想象的更接近。因为模型用户和聊天已经加入,我只需要在控制器中使用几行。所以我把它改成这样:

public function view() {
    $chats = $this->Chat->find('all');
    $this->set('chats', $chats);
}

没有更多…

Error:syntax Error,意外的“$this”T_变量,期望loadmoduletrized行的函数T_函数,但无法使其工作:未定义索引中的get Error$id$id=$chats['Chat']['user_id'];您好,Widrogo,我已经用$chatsok中返回的数组更新了问题,我看不出问题所在,因为您正在使用foreach所需的数据数组来获取聊天的勇气,但应该是$id=$chats[0]['Chat']['user_id'];->如果您想要数组中的第一个id,但我看不到获取第一个值的数组数据的编号,当我按照您答复的最后一部分进行操作时,我得到:SQL查询:选择Chat.id、Chat.user\u id、Chat.text、Chat.created、Chat.modified、user.id、user.firstname、user.lastname、user.email、user.password、user.picture、,User.company、User.adminrole、User.onduty、User.lastlogin、User.created、User.modified从c0captainslog.chats作为聊天室左侧加入c0captainslog.users作为聊天室上的用户。User\u id=User.id,其中1=1按id订购,如果我使用$this->setcompact'userDetails';我将如何使用返回的详细信息?我相信您可以自己弄清楚如何使用数组:很抱歉,在这种情况下,我不能使用,因为数组已返回OK,但它没有从用户表中找到匹配的数组
<?php 
foreach($chats as $chat) :
    echo "<tr>";
    echo "<td>".$userdetails['User']['firstname']."</td>";
    echo "<td>".$chat['Chat']['user_id']."</td>";
    echo "<td>".$chat['Chat']['text']."</td>";
    echo "<td>".$chat['Chat']['created']."</td>";
    echo "</tr>";
endforeach 
?>
[Chat] => Array
    (
        [id] => 1
        [user_id] => 11
        [text] => hello
        [created] => 2014-05-21 19:56:16
        [modified] => 2014-05-21 19:56:16
    )
class ChatsController extends AppController {

    public function view() {
        $this->loadModel('User');
        $this->loadModel('Chat');
        $chats = $this->Chat->find('all', array(
            'order' => array('id' => 'ASC'),
            'recursive' => -1
            ));
        $this->set('chats', $chats);
        $id = $chats['Chat']['user_id'];
        $userdetails = $this->Chat->User->find('first', array(
            'conditions' => array(
                'id' => $id
                ),
            recursive => -1
            ));
       $this->set(compact('userDetails'));  
    }
}
return $userdetails;
$this->set(compact('userDetails'));
public function view() {
    $chats = $this->Chat->find('all');
    $this->set('chats', $chats);
}