web-dev-qa-db-fra.com

L'objet de la classe stdClass n'a pas pu être converti en chaîne - laravel

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.

10
stackUnderflow

$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(....
19
Damien Pirsy

Essayez cette simple dans une ligne de code: - 

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

J'espère que ça aide :)

27
kunal

Si vous avez une collection d'objets stdClass, vous pouvez essayer ceci:

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

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

0
Güney Saramalı

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';
0
Japhet Johnson