web-dev-qa-db-ja.com

クラスstdClassのオブジェクトを文字列に変換できませんでした-laravel

私は このドキュメント をフォローしています

my laravel 4プロジェクトでExcelへのエクスポートを実装します。

だから、このような配列からExcelファイルを生成しようとしています:

//$results is taken with db query

$data = array();
foreach ($results as $result) {
   $result->filed1 = 'some modification';
   $result->filed2 = 'some modification2';
   $data[] = $result;
}
Excel::create('Filename', function($Excel) use($data) {

$Excel->sheet('Sheetname', function($sheet) use($data) {

    $sheet->fromArray($data);

      });

})->export('xls');

ただし、これにより例外が発生します。

  Object of class stdClass could not be converted to string

私は何を間違えていますか?

更新:

これを試しました:

$data = get_object_vars($data);

その結果:

get_object_vars() expects parameter 1 to be object, array given

この:

$data = (array)$data;

初期エラーが発生します。

12
stackUnderflow

$dataは確かに配列ですが、オブジェクトで構成されています。

コンテンツを作成する前に配列に変換します。

$data = array();
foreach ($results as $result) {
   $result->filed1 = 'some modification';
   $result->filed2 = 'some modification2';
   $data[] = (array)$result;  
   #or first convert it and then change its properties using 
   #an array syntax, it's up to you
}
Excel::create(....
24
Damien Pirsy

1行のコードでこれを試してください:

$data= json_decode( json_encode($data), true);

それが役に立てば幸い :)

34
kunal

最初にオブジェクトを配列に変更する必要がある場合があります。 exportが何をするのかわかりませんが、配列を期待していると思います。

どちらかを使用できます

get_object_vars()

または、そのオブジェクトが単純な場合は、それを型キャストするだけです。

$arr = (array) $Object;

4
Kishor Kurian

StdClassオブジェクトのコレクションがある場合、これを試すことができます:

$data = $data->map(function ($item){
            return get_object_vars($item);
        });
2
Edujugon

次のような値を返す別のオブジェクトを使用してオブジェクト要素を呼び出そうとすると、同じエラーが発生しました。

$this->array1 = a json table which returns country codes of the ip
$this->array2 = a json table which returns languages of the country codes

$this->array2->$this->array1->country;// Error line

上記のコードはエラーを投げていたので、私はそれを修正するために多くの方法を試しました。この部分を呼び出す$this->array1->country戻り値としての別の関数、(string)、引用などにそれを取り入れます。ウェブ上で解決策を見つけることさえできなかったので、解決策は非常に簡単であることに気付きました。実行する必要があるのは、中かっこで囲むことです。これにより、オブジェクトを別のオブジェクトの要素値でターゲットにできます。のような;

$this->array1 = a json table which returns country codes of the ip
$this->array2 = a json table which returns languages of the country codes

$this->array2->{$this->array1->country};

同じことに直面している人が答えを見つけることができなかった場合、私はこの単純な解決策のために夜を過ごすので、これが役立つことを願っています=)

0

これは簡単です。あなたがする必要があるのはこのようなものです。

  $result->get(filed1) = 'some modification';
  $result->get(filed2) = 'some modification2';
0
Japhet Johnson