簡體   English   中英

MySQL JOIN-JSON僅從一個表返回數據

[英]MySQL JOIN - json returns data only from one table

我有一個小問題,當將JSON通過前端的ajax放入而沒有來自Users表的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); 在ajax中,在Chrome開發者控制台中返回以下內容(再次,缺少userName ):

在此處輸入圖片說明

任何幫助是極大的贊賞!

編輯:我已經在Privatemessage類中實現了JsonSerializable,卻忘記了在類內的jsonSerialize()方法中返回userName。

您的班級Privatemessage可能需要具有公共的$ username屬性,此功能才能起作用。 這取決於您如何實現JSON轉換。 從注釋中看,您似乎正在使用JsonSerializable,因此您需要確保在jsonSerialize方法中考慮了所有當前字段。


查看您的代碼,如果目標只是生成JSON響應,則在此處看不到創建Privatemessage實例的意義。 您為什么不只使用從PDO返回的現有對象?

return $stmt->fetchAll(PDO::FETCH_OBJ);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM