私は このドキュメント をフォローしています
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;
初期エラーが発生します。
$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(....
1行のコードでこれを試してください:
$data= json_decode( json_encode($data), true);
それが役に立てば幸い :)
最初にオブジェクトを配列に変更する必要がある場合があります。 export
が何をするのかわかりませんが、配列を期待していると思います。
どちらかを使用できます
または、そのオブジェクトが単純な場合は、それを型キャストするだけです。
$arr = (array) $Object;
StdClassオブジェクトのコレクションがある場合、これを試すことができます:
$data = $data->map(function ($item){
return get_object_vars($item);
});
次のような値を返す別のオブジェクトを使用してオブジェクト要素を呼び出そうとすると、同じエラーが発生しました。
$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};
同じことに直面している人が答えを見つけることができなかった場合、私はこの単純な解決策のために夜を過ごすので、これが役立つことを願っています=)
これは簡単です。あなたがする必要があるのはこのようなものです。
$result->get(filed1) = 'some modification';
$result->get(filed2) = 'some modification2';