with updateorcreate create array appends php arrays laravel laravel-4 laravel-3

php - updateorcreate - Convertir objeto laravel a matriz



updateorcreate laravel (11)

Salida Laravel:

Array ( [0] = stdClass Object ( [ID] = 5 ) [1] = stdClass Object ( [ID] = 4 ) )

Quiero convertir esto en matriz normal. Sólo quiero eliminar ese stdClass Object . También traté de usar ->toArray(); pero me sale un error:

Llame a una función miembro toArray () en un no-objeto.

¿Cómo puedo arreglar esto?

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


$ foo = Bar :: getBeers (); $ foo = $ foo-> toArray ();


Es muy sencillo. Se puede usar así: -

Suppose You have one users table and you want to fetch the id only $users = DB::table(''users'')->select(''id'')->get(); $users = json_decode(json_encode($users)); //it will return you stdclass object $users = json_decode(json_encode($users),true); //it will return you data in array echo ''<pre>''; print_r($users);

Espero eso ayude


Necesitas iterar sobre la matriz

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

ans use la conversión (array) porque tiene una matriz de objetos de la clase estándar y no el objeto en sí

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 se ha convertido a matriz.


Por si acaso alguien todavía aterriza aquí buscando una respuesta. Se puede hacer usando PHP plano. Una forma más fácil es revertir json el objeto.

function objectToArray(&$object) { return @json_decode(json_encode($object), true); }


Si desea obtener solo ID en array, puede usar array_map:

$data = array_map(function($object){ return $object->ID; }, $data);

Con eso, devuelve una matriz con ID en cada pos.


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

// application/config/database.php ''fetch'' => PDO::FETCH_CLASS, // to ''fetch'' => PDO::FETCH_ASSOC,

Espero que esto ayude.


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 argumento y ¡voilá! Se devuelve una matriz asociativa.


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


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());


ACTUALIZACIÓN desde la versión 5.4 de Laravel ya no es posible.

Puedes cambiar tu configuración de db, como 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);


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

O cuando toArray() falla porque es una toArray()

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

¿No funciona? Tal vez puedas encontrar tu respuesta aquí:

Convertir objeto PHP a matriz asociativa