Skip to content

Saving Array of Pointers Saves the Whole Object of The Pointer #6174

Closed
@bahaa-kallas

Description

@bahaa-kallas

Issue Description

When saving array of pointers each pointer saved along with the attributes of the referenced object
i noticed that there was already an issue open for this and then a PR applied and fix the issue
but it turns out that somehow its still exist
#6049

Steps to reproduce

this code used to save Parent Object which have list of PostCategory as Array of Pointers

 // Create Parent Object with  postCategories initialized as empty list and save it in the database
 val ceParent = Parent().apply {
      this.arName = "قسم هندسة الاتصالات"
      this.enName = "CE Department"
      this.postCategories = arrayListOf()
      this.channelName = "ce"
    }

    ceParent.save()

    // Create category object and link it to the previous Parent and save it in the database

    val ceGeneralAnnouncementCategory = PostCategory().apply {
      this.arName = ""
      this.enName = "General Announcement"
      this.channelName = "ceGenAnnounce"
      this.parent = ceParent
    }


    val ceGradesCategory = PostCategory().apply {
      this.arName = ""
      this.enName = "Exams Grades"
      this.channelName = "ceGrades"
      this.parent = ceParent
    }

    ceGeneralAnnouncementCategory.save()
    ceGradesCategory.save()


    // Get the Parent object and then update it with a list of the categories that you already saved
    ceParent.postCategories = arrayListOf(
        ceGeneralAnnouncementCategory,
        ceGradesCategory
    )

    ceParent.save()

Expected Results

saving array of pointers must be saved in this form :

[
  {
    "__type": "Pointer",
    "className": "PostCategory",
    "objectId": "OalNlXznGB"
  },
  {
    "__type": "Pointer",
    "className": "PostCategory",
    "objectId": "KEmcaV5R40"
  }
]

Actual Outcome

but when looking to the dashboard it looks like this

[
  {
    "parent": {
      "postCategories": [
        {
          "__type": "Pointer",
          "className": "PostCategory",
          "objectId": "shf1jCQhst"
        },
        {
          "parent": {
            "__type": "Pointer",
            "className": "Parent",
            "objectId": "sP0eiMLlbM"
          },
          "enName": "Exams Grades",
          "channelName": "itGrades",
          "arName": "",
          "createdAt": "2019-11-02T13:09:55.744Z",
          "updatedAt": "2019-11-02T13:09:55.744Z",
          "objectId": "tdijo6M8CD",
          "__type": "Object",
          "className": "PostCategory"
        }
      ],
      "enName": "IT Department",
      "channelName": "it",
      "arName": "قسم هندسة تقانة المعلومات",
      "createdAt": "2019-11-02T13:09:54.359Z",
      "updatedAt": "2019-11-02T13:10:10.204Z",
      "objectId": "sP0eiMLlbM",
      "__type": "Object",
      "className": "Parent"
    },
    "enName": "General Announcement",
    "channelName": "itGenAnnounce",
    "arName": "",
    "createdAt": "2019-11-02T13:09:55.160Z",
    "updatedAt": "2019-11-02T13:09:55.160Z",
    "objectId": "shf1jCQhst",
    "__type": "Object",
    "className": "PostCategory"
  },
  {
    "parent": {
      "postCategories": [
        {
          "parent": {
            "__type": "Pointer",
            "className": "Parent",
            "objectId": "sP0eiMLlbM"
          },
          "enName": "General Announcement",
          "channelName": "itGenAnnounce",
          "arName": "",
          "createdAt": "2019-11-02T13:09:55.160Z",
          "updatedAt": "2019-11-02T13:09:55.160Z",
          "objectId": "shf1jCQhst",
          "__type": "Object",
          "className": "PostCategory"
        },
        {
          "__type": "Pointer",
          "className": "PostCategory",
          "objectId": "tdijo6M8CD"
        }
      ],
      "enName": "IT Department",
      "channelName": "it",
      "arName": "قسم هندسة تقانة المعلومات",
      "createdAt": "2019-11-02T13:09:54.359Z",
      "updatedAt": "2019-11-02T13:10:10.204Z",
      "objectId": "sP0eiMLlbM",
      "__type": "Object",
      "className": "Parent"
    },
    "enName": "Exams Grades",
    "channelName": "itGrades",
    "arName": "",
    "createdAt": "2019-11-02T13:09:55.744Z",
    "updatedAt": "2019-11-02T13:09:55.744Z",
    "objectId": "tdijo6M8CD",
    "__type": "Object",
    "className": "PostCategory"
  }
]

Environment Setup

  • Server
    • parse-server version : 3.9.0
    • Parse Hosted by: Back4app

Note

this behaviour doesn't affect querying the Parent Object (Who has the array of pointers field)
i still able to get the array of pointers objects with include

val query = ParseQuery.getQuery(Parent::class.java)
    query.whereEqualTo("objectId","uYn8FF1Qcd")
    query.include(Parent::postCategories.name)

    val result = query.first.postCategories

    result?.forEach{
      Log.d("PARENT : ","${it.channelName}")
    }

UPDATE

maybe its problem with parse dashboard. i cleared all the records in the Parent Class and made the insertion step again and the result was as expected. but when i have made another insertion the object who saved correctly and the newly inserted object has the Array of pointers field changed to the whole object saved along with each pointer

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions