Выход Laravel:
Array
(
[0] = stdClass Object
(
[ID] = 5
)
[1] = stdClass Object
(
[ID] = 4
)
)
Я хочу преобразовать это в обычный массив. Просто хочу удалить это stdClass Object
, Я также пытался использовать ->toArray();
но я получаю ошибку:
Вызов функции-члена toArray () для необъекта.
Как я могу это исправить?
Функциональные возможности были реализованы на http://www.srihost.com
ОБНОВЛЕНИЕ с версии 5.4 Laravel это больше не возможно.
Вы можете изменить свою конфигурацию базы данных, как предложил @Varun, или, если вы хотите сделать это именно в этом случае, тогда:
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);
Или когда toArray()
не удается, потому что это stdClass
foreach($yourArrayName as $object)
{
$arrays[] = (array) $object;
}
// Dump array with object-arrays
dd($arrays);
Не работает? Может быть, вы можете найти свой ответ здесь:
Вы также можете получить весь результат всегда в виде массива, изменив
// application/config/database.php
'fetch' => PDO::FETCH_CLASS,
// to
'fetch' => PDO::FETCH_ASSOC,
Надеюсь, это поможет.
это сработало для меня:
$data=DB::table('table_name')->select(.......)->get();
$data=array_map(function($item){
return (array) $item;
},$data);
или же
$data=array_map(function($item){
return (array) $item;
},DB::table('table_name')->select(.......)->get());
это сработало для меня в Laravel 5.4
$partnerProfileIds = DB::table('partner_profile_extras')->get()->pluck('partner_profile_id');
$partnerProfileIdsArray = $partnerProfileIds->all();
выход
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
Вам нужно перебрать массив
for ($i = 0, $c = count($array); $i < $c; ++$i) {
$array[$i] = (array) $array[$i];
}
и использовать (array)
преобразование, потому что у вас есть массив объектов класса Std, а не сам объект
Пример:
$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;
Выход для этого:
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" } }
как и ожидалось. Объект stdClass
был преобразован в массив.
Если вы хотите получить только идентификатор в массиве, можете использовать array_map:
$data = array_map(function($object){
return $object->ID;
}, $data);
После этого верните массив с идентификатором в каждой позиции.
Я предлагаю вам просто сделать это в рамках вашего метода
public function MyAwesomeMethod($returnQueryAs = null)
{
$tablename = 'YourAwesomeTable';
if($returnQueryAs == 'array')
{
DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
}
return DB::table($tablename)->get();
}
С этим все, что вам нужно, это передать строку ‘массив’ в качестве аргумента и вуаля! Ассоциативный массив возвращается.