Как объединить два массива объектов в Laravel контроллере? - PullRequest
0 голосов
/ 17 февраля 2020

У меня есть эти функции для вызова наборов данных, которые используют запрос БД для Данные A и CURL для Данные B .

Прямо сейчас мне удалось отобразить вывод, но каким-то образом данные А не могут объединиться с данными B. Мой код, как показано ниже.

Пространство имен:

use \stdClass;

Код:

public function find($user = null) {
    if($user)
    {
        // Data A
        $sql            = "SELECT * FROM TABLE WHERE ID = '".$user."' "; 
        $arr            = DB::connection('mysql')->select($sql);
        $resultData     = new \stdClass();

        foreach ($arr as $key => $value) 
        {
            $resultData->$key = $value; // Extract Data A table
        }


        // Data B
        $url    = "http://localhost/data/curl.php?value=".$user; 
        $ch     = curl_init();
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL,$url);
        $result = curl_exec($ch);
        curl_close($ch);
        $row    = json_decode($result, true); 

        foreach ($row as $key => $value) 
        {
            $resultData->$key = $value; // Extract Data B 
        }  

        dd($resultData);
        return true;
    }
    return false;
}

Моя цель - объединить эти два набора данных (A & B) в один.

То, что я сейчас получаю, выглядит так в моем браузере, если я отображаю вывод отдельно. Когда я его объединил, отображаются только данные B:

данные A

{#310 
  +"0": {#213 
    +"id": "1"
    +"name": "MIKE"
    +"acc_no": "AAA001"
    +"email": "mike@col.com" 
  }
}

данные B

{#310 
  +"0": "CLERK"
  +"TITLE": "CLERK"
  +"1": "Clerk, IT Department"
  +"POSITION": "Clerk, IT Department"
  +"2": "Rozaimi Bin Zamahri"
  +"SECTION": "Office"
}

Ценю, если кто-то может мне помочь. Спасибо.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2020

Problem1: Не просто конкатанируйте sql строку с параметрами, у нее есть проблема SQL -инжекции, если вы хотите использовать DB::select с параметрами, вы можете сделать это следующим образом :

$sql  = "SELECT * FROM TABLE WHERE ID = ? "; 
$arr  = DB::connection('mysql')->select($sql, [$user]);

Проблема 2: Поскольку вы используете метод выбора БД, он вернет гнездо массива с объектами. сначала вам нужно получить объект, сделать что-то вроде этого:

$arr = DB::connection('mysql')->select($sql)[0];

А затем вы можете объединить их с помощью l oop или просто превратить их в массив и объединить их.

0 голосов
/ 17 февраля 2020

Попробуйте это: -

    $data1=(object)['a','b'];
    $data2=(object)['c','d'];
    $result = (object) array_merge(
        (array) $data1, (array) $data2);

    print_r($result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...