首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL JOIN - json只从一个表返回数据

MySQL JOIN - json只从一个表返回数据
EN

Stack Overflow用户
提问于 2018-07-23 02:57:20
回答 1查看 36关注 0票数 0

我有一个小问题,当通过前端的ajax而不是来自用户表的userName时,JSON只返回来自一个表的数据。用var_dump检查后端看起来没问题:

/home/maciek/Workspace/Communic/public/admin/privMessage.php:11:
     array (size=3)
      0 => 
        object(Privatemessage)[6]
          private 'id' => string '4' (length=1)
          private 'senderId' => string '2' (length=1)
          private 'receiverId' => string '1' (length=1)
          private 'creationDate' => string '2017-06-28 23:49:15' (length=19)
          private 'text' => string 'asdasdasda' (length=10)
          private 'readStatus' => string '1' (length=1)
          **private 'userName' => string 'stefan' (length=6)**

MySQL查询(单独正确执行并返回所需的结果-结果中包含用户名):

SELECT p.*, u.username FROM PrivateMessage p RIGHT JOIN Users u ON p.sender_id=u.id WHERE receiver_id=:receiver_id

Privatemessage中使用该查询的方法:

    static public function loadAllRcvdPrvMsgsByUserId(PDO $pdo, $receiverId) {
    $stmt = $pdo->prepare("SELECT p.*, u.username FROM PrivateMessage p RIGHT JOIN Users u ON p.sender_id=u.id WHERE receiver_id=:receiver_id");
    $result = $stmt->execute([
        'receiver_id' => $receiverId
    ]);

    $rcvdPrvMsgsArray = [];

    if ($result === true && $stmt->rowCount() > 0) {
        while ($row = $stmt->fetchAll(PDO::FETCH_OBJ)) {

            foreach ($row as $dbPrvMessage) {
                $loadedPrvMsg = new Privatemessage($pdo);
                $loadedPrvMsg->id = $dbPrvMessage->id;
                $loadedPrvMsg->senderId = $dbPrvMessage->sender_id;
                $loadedPrvMsg->receiverId = $dbPrvMessage->receiver_id;
                $loadedPrvMsg->creationDate = $dbPrvMessage->privatemessage_datetime;
                $loadedPrvMsg->text = $dbPrvMessage->privatemessage_text;
                $loadedPrvMsg->readStatus = $dbPrvMessage->privatemessage_readstatus;
                $loadedPrvMsg->userName = $dbPrvMessage->username;

                $rcvdPrvMsgsArray[] = $loadedPrvMsg;
            }
        }
        return $rcvdPrvMsgsArray;
    }
    return null;
}

js ajax:

    function getReceivedPrivateMsg() {
    $
        .ajax({
            url: '../../../rest/rest.php/privateMessage',
            type: 'GET'
        })
        .done(function (response) {

            console.log(response.success);

        })
        .fail(function (error) {
            console.log('Create sent private message error', error);
        });
}

console.log(response.success);in ajax在Chrome开发控制台中返回以下内容(同样,缺少userName ):

任何帮助都是非常感谢的!

编辑:我在Privatemessage类中实现了JsonSerializable,但忘记了在类中的jsonSerialize()方法中返回userName。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-23 03:03:45

您的类Privatemessage可能需要有一个公共$username属性才能正常工作。这取决于您是如何实现JSON转换的。从注释中可以看出,您似乎正在使用JsonSerializable,因此您需要确保在jsonSerialize方法中考虑到所有当前字段。

看一下您的代码,如果目标只是生成一个JSON响应,我不明白在这里创建Privatemessage实例的意义。为什么不直接使用从PDO返回的现有对象呢?

return $stmt->fetchAll(PDO::FETCH_OBJ);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51468335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档