lundi 15 octobre 2018

Merge children array ends up Indirect modification of overloaded element

I am planning to use JsTree as the plugin due to its capability to search within subfolders. I have created an array but the requirements needed for the JsTree is from this documentation, which is this array.

{
  id          : "string" // will be autogenerated if omitted
  text        : "string" // node text
  icon        : "string" // string for custom
  state       : {
    opened    : boolean  // is the node open
    disabled  : boolean  // is the node disabled
    selected  : boolean  // is the node selected
  },
  children    : []  // array of strings or objects
  li_attr     : {}  // attributes for the generated LI node
  a_attr      : {}  // attributes for the generated A node
}

This is my current code before implementing the requirements object array from the jstree plugin.

$drawings = [];
      $getDrawings = DrawingFolder::latest()->get();

      $drawings = $getDrawings;
      foreach ($getDrawings as $key => $drawing) {
        // get root folder files
        $draws = Drawing::getDrawingsPDFById($drawing->id);
        $drawSubFolders = DrawingSubFolder::getDrawingFolderById($drawing->id, DrawingSubFolder::PARENT_FIRST_FOLDER);

        $drawings[$key]['drawings'] = $draws;
        $drawings[$key]['folders'] = $drawSubFolders;

        // get first folder
        foreach ($drawSubFolders as $key1 => $drawSubFolder) {
          $draw2 = DrawingSubFolder::getSubFoldersById($drawSubFolder->id, DrawingSubFolder::PARENT_SECOND_FOLDER);
          $getFiles = DrawingRelation::getPDFByParentId($drawSubFolder->id);

          $drawings[$key]['folders'][$key1]['folders'] = $draw2;
          $drawings[$key]['folders'][$key1]['files'] = $getFiles;

          // get second folder
          foreach ($draw2 as $key2 => $draw) {
            $draw3 = DrawingSubFolder::getSubFoldersById($draw->id, DrawingSubFolder::PARENT_THIRD_FOLDER);
            $getFiles = DrawingRelation::getPDFByParentId($draw->id);

            $drawings[$key]['folders'][$key1]['folders'][$key2]['folders'] = $draw3;
            $drawings[$key]['folders'][$key1]['folders'][$key2]['files'] = $getFiles;

            // get the last files
            foreach ($draw3 as $key3 => $item) {
              $filez = Drawing::getChildPDFFiles($item->id, DrawingSubFolder::PARENT_THIRD_FOLDER);

              $drawings[$key]['folders'][$key1]['folders'][$key2]['folders'][$key3]['files'] = $filez;
            }
          }
        }
      }

This is the output:

{
   "success":true,
   "data":[
      {
         "id":8,
         "folder_name":"A Brand new folder",
         "slug_name":"a-brand-new-folder",
         "parent":0,
         "status":null,
         "created_by":1,
         "created_at":"2018-10-11 09:41:22",
         "updated_at":"2018-10-11 09:41:22",
         "drawings":[
            {
               "id":61,
               "drawing_folder_id":8,
               "filename":"spec/pdf/YEdXSQyVSouMphBp4Pif6y5SHQGoDNWuKeWm9EB3.xls",
               "title":"annoying",
               "status":null,
               "created_by":1,
               "created_at":"2018-10-11 09:41:43",
               "updated_at":"2018-10-11 09:41:43"
            },
            {
               "id":62,
               "drawing_folder_id":8,
               "filename":"spec/pdf/59iLD0KX8e3foyhWQb88qLa2XNKW9jLaPJO8odwC.ppt",
               "title":"Javascript",
               "status":null,
               "created_by":1,
               "created_at":"2018-10-11 09:41:44",
               "updated_at":"2018-10-11 09:41:44"
            }
         ],
         "folders":[
            {
               "id":59,
               "sub_folder_name":"That girl",
               "slug_folder_name":"that-girl",
               "created_by":1,
               "created_at":"2018-10-11 09:41:53",
               "updated_at":"2018-10-11 09:41:53",
               "folders":[
                  {
                     "drawing_folder_id":8,
                     "sub_folder_id":60,
                     "parent_num":2,
                     "id":60,
                     "sub_folder_name":"Thesis",
                     "slug_folder_name":"thesis",
                     "text":"Thesis",
                     "folders":[

                     ],
                     "files":[

                     ]
                  },
                  {
                     "drawing_folder_id":8,
                     "sub_folder_id":61,
                     "parent_num":2,
                     "id":61,
                     "sub_folder_name":"Project",
                     "slug_folder_name":"project",
                     "text":"Project",
                     "folders":[

                     ],
                     "files":[

                     ]
                  }
               ],
               "files":[
                  {
                     "id":63,
                     "filename":"spec/pdf/QjqjGI3baLEeMxBK1yQ5O5pw0duUs1zOXI7lEBCn.doc",
                     "title":"Complicated"
                  },
                  {
                     "id":64,
                     "filename":"spec/pdf/2YVAD1Vdvtg6NWeoItfMK3s7sxdjlMxm2v1XwbmA.txt",
                     "title":"Project overload"
                  }
               ]
            }
         ]
      },
      {
         "id":6,
         "folder_name":"Magic",
         "slug_name":"magic",
         "parent":0,
         "status":null,
         "created_by":1,
         "created_at":"2018-10-08 14:52:44",
         "updated_at":"2018-10-08 14:52:44",
         "drawings":[
            {
               "id":55,
               "drawing_folder_id":6,
               "filename":"spec/pdf/5fYjBCbw1toKlp0dAYH328XQ1U4nkmt4VBbPw6eK.xls",
               "title":"Rodel short",
               "status":null,
               "created_by":1,
               "created_at":"2018-10-11 07:56:57",
               "updated_at":"2018-10-11 07:56:57"
            },
            {
               "id":56,
               "drawing_folder_id":6,
               "filename":"spec/pdf/s0MxZFArsOt5IGpD9ucReu1BzRLTN2ts3bx6DyrY.zip",
               "title":"Rodel Cute",
               "status":null,
               "created_by":1,
               "created_at":"2018-10-11 07:57:03",
               "updated_at":"2018-10-11 07:57:03"
            }
         ],
         "folders":[
            {
               "id":18,
               "sub_folder_name":"New Folder",
               "slug_folder_name":"new-folder",
               "created_by":1,
               "created_at":"2018-10-09 11:29:17",
               "updated_at":"2018-10-09 11:29:17",
               "folders":[
                  {
                     "drawing_folder_id":6,
                     "sub_folder_id":56,
                     "parent_num":2,
                     "id":56,
                     "sub_folder_name":"Power Ranger",
                     "slug_folder_name":"power-ranger",
                     "text":"Power Ranger",
                     "folders":[
                        {
                           "drawing_folder_id":6,
                           "sub_folder_id":58,
                           "parent_num":3,
                           "id":58,
                           "sub_folder_name":"Folder here",
                           "slug_folder_name":"folder-here-1",
                           "text":"Folder here",
                           "files":[
                              {
                                 "drawingId":54,
                                 "filename":"spec/pdf/licqS1sasdTANKTAEqK7QzCcLBnlNVqtu1BL6a75.ppt",
                                 "title":"SamplePPTFile_500kb.ppt",
                                 "text":"SamplePPTFile_500kb.ppt"
                              },
                              {
                                 "drawingId":53,
                                 "filename":"spec/pdf/hZPdpqUKvJIw79k40RXVMx3iESpIm8bpICfzQlOS.xls",
                                 "title":"SampleXLSFile_19kb.xls",
                                 "text":"SampleXLSFile_19kb.xls"
                              },
                              {
                                 "drawingId":52,
                                 "filename":"spec/pdf/wyuIkzrt1asI8nYrgKFpTJcdI9W3oi1liHZeNdp2.doc",
                                 "title":"SampleDOCFile_100kb.doc",
                                 "text":"SampleDOCFile_100kb.doc"
                              }
                           ]
                        }
                     ],
                     "files":[

                     ]
                  },
                  {
                     "drawing_folder_id":6,
                     "sub_folder_id":57,
                     "parent_num":2,
                     "id":57,
                     "sub_folder_name":"Ranger Power",
                     "slug_folder_name":"ranger-power",
                     "text":"Ranger Power",
                     "folders":[

                     ],
                     "files":[

                     ]
                  }
               ],
               "files":[
                  {
                     "id":57,
                     "filename":"spec/pdf/qdLf9GhDZdvT9fT7PwV8yifR2EQoVbP75ygIPX26.txt",
                     "title":"Jumps over the lazy dog"
                  },
                  {
                     "id":58,
                     "filename":"spec/pdf/f6ExjPNS73RECuHT45yTThduT0wMl8RD1dZmgXEY.ppt",
                     "title":"Quick brown fox"
                  }
               ]
            }
         ]
      }
   ]
}

This is my attempt:

$drawings = [];
  $getDrawings = DrawingFolder::latest()->get([
    "id",
    "folder_name as text"
  ]);

  $drawings = $getDrawings;
  foreach ($getDrawings as $key => $drawing) {
    // get root folder files
    $draws = Drawing::getDrawingsPDFById2($drawing->id);
    $drawSubFolders = DrawingSubFolder::getDrawingFolderById2($drawing->id, DrawingSubFolder::PARENT_FIRST_FOLDER);

    $files = [];
    $drawings[$key]['children'] = [];

    $folderz = [];
    foreach ($drawSubFolders as $key1 => $drawSubFolder) {
      $folderz[$key1] = $drawSubFolder;
    }

    // First Child
    $drawings[$key]['children'] = array_merge($folderz, $files);

    // get first folder
    foreach ($drawSubFolders as $index => $drawSubFolder) {
      $draw2 = DrawingSubFolder::getSubFoldersById2($drawSubFolder->id, DrawingSubFolder::PARENT_SECOND_FOLDER);
      $getFiles = DrawingRelation::getPDFByParentId($drawSubFolder->id);

      $folders = [];
      // get second folder
      foreach ($draw2 as $key2 => $draw) {
        $folders[$key2] = $draw;
      }

      $filesDrawingRelation = [];
      foreach ($getFiles as $key2 => $file) {
        $filesDrawingRelation[$key2] = $file;
      }

      $drawings[$key]['children'][$index]['children'] = array_merge($filesDrawingRelation, $folders);
      // $drawings[$key]['children'][$key1] = [];
      if ($drawing->id === $drawSubFolder->drawing_folder_id) {
        // $drawings[$key]['childrens'] = array_merge(json_decode($getFiles), $folders);
      }

    }
  }

I am not sure if where do I miss, but the error is from $drawings[$key]['children'][$index]['children'] = array_merge($filesDrawingRelation, $folders); or from $drawings[$key]['children'] = array_merge($folderz, $files);.

Because every time I try removing the $drawings[$key]['children'] = array_merge($folderz, $files) and replace it to $drawings[$key]['children'] = $folderz; works fine then adding up another array children $drawings[$key]['children'][$index]['children'] = $folders; will encounter an error which is the Indirect modification of overloaded element of App\\DrawingFolder has no effect.

Anyone has an idea on how to fix it?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire