web-dev-qa-db-ja.com

laravelオブジェクトを配列に変換

Laravel出力:

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

    )

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

    )

)
_

これを通常の配列に変換します。 _stdClass Object_を削除したいだけです。私も->toArray();を使用しようとしましたが、エラーが発生しました:

非オブジェクトのメンバー関数toArray()を呼び出します。

どうすれば修正できますか?

機能は http://www.srihost.com で実装されています

17
Your Friend

Laravelのバージョン5.4以降の更新は不可能です。

@Varunが提案するように、dbの設定を変更できます。または、まさにこの場合に変更する場合は、次のようにします。

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
Jarek Tkaczyk
_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);
_

動かない?多分あなたはあなたの答えをここで見つけることができます:

Convert PHPオブジェクトを連想配列に変換

24
Maurice

また、変更することにより、常にすべての結果を配列として取得することもできます

// application/config/database.php

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

これが役立つことを願っています。

7
Varun Varunesh

これは私のために働いた:

$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());
5
Touhid

これは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

2
scandar

配列を反復処理する必要があります

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

ansは(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のオブジェクトは配列に変換されました。

1

誰かがまだ答えを探してここに上陸した場合に備えて。プレーンなPHPを使用して実行できます。より簡単な方法は、オブジェクトを逆JSONすることです。

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

配列内のIDのみを取得する場合は、array_mapを使用できます。

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

それにより、すべての位置にIDを持つ配列を返します。

1
Ariel Ruiz

とても簡単です。次のように使用できます:-

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

それが役に立てば幸い

0
kunal

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

0
Pablo Ramires
_$res = ActivityServer::query()->select('channel_id')->where(['id' => $id])->first()->attributesToArray();
_

get()を使用し、オブジェクトを返します。attributesToArray()を使用して、オブジェクト属性を配列に変更します。

0
张鹏飞

メソッド内でこれを行うことをお勧めします

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

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

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

これで必要なのは、引数として文字列 'array'を渡すことです。連想配列が返されます。

0
Dammy