Je suis cette documentation
implémenter l'export vers Excel dans mon projet laravel 4.
J'essaie donc de générer un fichier Excel à partir d'un tableau comme ceci:
//$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');
Mais cela soulève une exception:
Object of class stdClass could not be converted to string
Qu'est-ce que je fais mal ?
METTRE À JOUR:
J'ai essayé ceci:
$data = get_object_vars($data);
qui se traduit par:
get_object_vars() expects parameter 1 to be object, array given
Ce:
$data = (array)$data;
Résultat dans l'erreur initiale.
$data
est en effet un tableau, mais il est constitué d'objets.
Convertissez son contenu en tableau avant de le créer:
$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(....
Essayez cette simple dans une ligne de code: -
$data= json_decode( json_encode($data), true);
J'espère que ça aide :)
Si vous avez une collection d'objets stdClass, vous pouvez essayer ceci:
$data = $data->map(function ($item){
return get_object_vars($item);
});
Je recevais la même erreur lorsque je tentais d'appeler un élément d'objet en utilisant une autre valeur de retour d'objet, telle que;
$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
Le code ci-dessus lançait l'erreur et j'ai essayé de nombreuses manières de la résoudre, par exemple; en appelant cette partie $this->array1->country
dans une autre fonction comme valeur de retour, (string)
, en la prenant entre guillemets, etc. Je ne pouvais même pas trouver la solution sur le Web, puis j’ai réalisé que la solution était très simple. Tout ce que vous avez à faire est de le placer entre accolades, ce qui vous permet de cibler un objet avec la valeur de l'élément d'un autre objet. comme;
$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};
Si quelqu'un qui fait face à la même chose et ne trouve pas la réponse, j'espère que cela pourra aider parce que je passe une nuit pour cette solution simple =)
C'est facile, tout ce que vous avez à faire, c'est quelque chose comme ça Prenez votre contenu comme ceci
$result->get(filed1) = 'some modification';
$result->get(filed2) = 'some modification2';