Pregunta Convertir objeto laravel en matriz


Salida Laravel:

Array
(
    [0] = stdClass Object
    (
        [ID] = 5

    )

    [1] = stdClass Object
    (
        [ID] = 4

    )

)

Quiero convertir esto en una matriz normal. Solo quiero eliminar eso stdClass Object. También intenté usar ->toArray(); pero me sale un error:

Llamada a una función miembro para Array () en un objeto no.

¿Cómo puedo arreglar esto?

Las funcionalidades se han implementado en http://www.srihost.com


16
2017-10-03 06:32


origen


Respuestas:


ACTUALIZAR desde la versión 5.4 de Laravel ya no es posible.

Puedes cambiar tu configuración de db, como se sugirió @Varun, o si quieres hacerlo solo en este caso, entonces:

DB::setFetchMode(PDO::FETCH_ASSOC);

// then
DB::table(..)->get(); // array of arrays instead of objects

// of course to revert the fetch mode you need to set it again
DB::setFetchMode(PDO::FETCH_CLASS);

34
2017-10-03 07:25



foreach($yourArrayName as $object)
{
    $arrays[] = $object->toArray();
}
// Dump array with object-arrays
dd($arrays);

O cuando toArray() falla porque es un stdClass

foreach($yourArrayName as $object)
{
    $arrays[] =  (array) $object;
}
// Dump array with object-arrays
dd($arrays);

¿No funciona? Quizás puedas encontrar tu respuesta aquí:

Convierta objeto PHP a matriz asociativa


20
2017-10-03 21:50



También puede obtener todos los resultados siempre como una matriz cambiando

// application/config/database.php

'fetch' => PDO::FETCH_CLASS,
 // to
'fetch' => PDO::FETCH_ASSOC,

Espero que esto ayude


7
2017-10-03 06:54



esto funcionó para mí:

$data=DB::table('table_name')->select(.......)->get();
$data=array_map(function($item){
    return (array) $item;
},$data);

o

$data=array_map(function($item){
    return (array) $item;
},DB::table('table_name')->select(.......)->get());

5
2018-01-29 11:45



Necesitas iterar sobre la matriz

for ($i = 0, $c = count($array); $i < $c; ++$i) {
    $array[$i] = (array) $array[$i];
}

uso ans (array) conversión porque tiene una matriz de objetos de la clase Std y no el objeto mismo

Ejemplo:

$users = DB::table('users')->get();

var_dump($users);

echo "<br /><br />";

for ($i = 0, $c = count($users); $i < $c; ++$i) {
    $users[$i] = (array) $users[$i];
}
var_dump($users);
exit;

La salida para esto es:

array(1) { [0]=> object(stdClass)#258 (8) { ["id"]=> int(1) ["user_name"]=> string(5) "admin" ["email"]=> string(11) "admin@admin" ["passwd"]=> string(60) "$2y$10$T/0fW18gPGgz0CILTy2hguxNpcNjYZHsTyf5dvpor9lYMw/mtKYfi" ["balance"]=> string(4) "0.00" ["remember_token"]=> string(60) "moouXQOJFhtxkdl9ClEXYh9ioBSsRp28WZZbLPkJskcCr0325TyrxDK4al5H" ["created_at"]=> string(19) "2014-10-01 12:00:00" ["updated_at"]=> string(19) "2014-09-27 12:20:54" } }

array(1) { [0]=> array(8) { ["id"]=> int(1) ["user_name"]=> string(5) "admin" ["email"]=> string(11) "admin@admin" ["passwd"]=> string(60) "$2y$10$T/0fW18gPGgz0CILTy2hguxNpcNjYZHsTyf5dvpor9lYMw/mtKYfi" ["balance"]=> string(4) "0.00" ["remember_token"]=> string(60) "moouXQOJFhtxkdl9ClEXYh9ioBSsRp28WZZbLPkJskcCr0325TyrxDK4al5H" ["created_at"]=> string(19) "2014-10-01 12:00:00" ["updated_at"]=> string(19) "2014-09-27 12:20:54" } } 

como se esperaba. Objeto de stdClass ha sido convertido a una matriz.


1
2017-10-03 06:34



esto funcionó para mí en laravel 5.4

$partnerProfileIds = DB::table('partner_profile_extras')->get()->pluck('partner_profile_id');
$partnerProfileIdsArray = $partnerProfileIds->all();

salida

array:4 [▼
  0 => "8219c678-2d3e-11e8-a4a3-648099380678"
  1 => "28459dcb-2d3f-11e8-a4a3-648099380678"
  2 => "d5190f8e-2c31-11e8-8802-648099380678"
  3 => "6d2845b6-2d3e-11e8-a4a3-648099380678"
]

https://laravel.com/api/5.4/Illuminate/Support/Collection.html#method_all


1
2018-03-22 10:13



Te sugiero que simplemente hagas esto dentro de tu método

public function MyAwesomeMethod($returnQueryAs = null)
{
    $tablename = 'YourAwesomeTable';

    if($returnQueryAs == 'array')
    {
        DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
    }

    return DB::table($tablename)->get();
}

Con esto, todo lo que necesitas es pasar la cadena 'array' como tu argumento y ¡Voila! Se devuelve una matriz asociativa.


0
2017-11-21 20:39