Преобразование объекта в массив в laravel

я спросил DB, как это, что привело меня к массиву:

foreach($oid as $orderid) { $orderdetailData[] = DB::table('order_details') ->join('orders', 'order_details.oid', '=', 'orders.oid') ->select('order_details.oid', 'orders.ostatus') ->where('order_details.oid', $orderid)->get(); } $data = array_flatten($orderdetailData); return $data; 

Это массив, который я получаю

 array (size=2) 0 => object(stdClass)[174] public 'oid' => int 1 public 'ostatus' => string 'Placed' (length=6) 1 => object(stdClass)[158] public 'oid' => int 2 public 'ostatus' => string 'Placed' (length=6) 

Я пытаюсь получить этот массив в форме

 array (size=2) 0 => array (size=2) public 'oid' => int 1 public 'ostatus' => string 'Placed' (length=6) 1 => array (size=2) public 'oid' => int 2 public 'ostatus' => string 'Placed' (length=6) 

Я попытался сделать это:

 foreach($orderdetailData as $key => $value){ $data[] = array_flatten($orderdetailData[$key]); } 

Но это делает мне массив в этой форме:

 array (size=2) 0 => array (size=1) 0 => object(stdClass)[174] public 'oid' => int 1 public 'ostatus' => string 'Placed' (length=6) 1 => array (size=1) 0 => object(stdClass)[158] public 'oid' => int 2 public 'ostatus' => string 'Placed' (length=6) 

Который не я то, что я ищу. Может ли кто-нибудь сказать мне, что было бы простым способом сделать это? благодаря

    Использование array_map и литье в массив должно быть достаточным:

     $data = array_map(function($object){ return (array) $object; }, $data); 

    Я также не буду запускать запросы внутри цикла. Вы должны попытаться получить эти данные в одном запросе из db. Что-то вроде этого могло бы работать:

     $data = DB::table('order_details') ->join('orders', 'order_details.oid', '=', 'orders.oid') ->select('order_details.oid', 'orders.ostatus') ->whereIn('order_details.oid', $oid)->get(); 

    редактировать

    Как уже упоминалось в другом ответе, позвольте мне объяснить, как вы можете сделать то же самое, установив PDO в FETCH_ASSOC :

     DB::setFetchMode(PDO::FETCH_ASSOC); $data = DB::table('order_details') .... ->get(); 

    Однако это изменяет режим выборки глобально для остальной части запроса (по крайней мере, если вы не открываете новое соединение). Чтобы быть спасенным, вы должны изменить его потом:

     DB::setFetchMode(PDO::FETCH_ASSOC); $data = DB::table('order_details') .... ->get(); DB::setFetchMode(PDO::FETCH_CLASS); 

    Или даже сначала создайте резервную копию, если вы не можете быть уверены, что используется по умолчанию:

     $fetchModeBefore = DB::getFetchMode(); DB::setFetchMode(PDO::FETCH_ASSOC); $data = DB::table('order_details') .... ->get(); DB::setFetchMode($fetchModeBefore); 

    На объекте PDO / DB вы можете установить стиль возврата для соединения.