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í: