Подтвердить что ты не робот

Объект класса stdClass не может быть преобразован в строку - laravel

Я следую этой документации

чтобы реализовать экспорт в Excel в моем проекте laravel 4.

Итак, я пытаюсь создать 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

Что я делаю неправильно?

UPDATE:

Пробовал это:

$data = get_object_vars($data);

что приводит к:

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

Это:

$data = (array)$data;

Результаты начальной ошибки.

4b9b3361

Ответ 1

$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 up to you
}
Excel::create(....

Ответ 2

Попробуйте это просто в одной строке кода: -

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

Надеюсь, это поможет:)

Ответ 3

Возможно, вам придется сначала изменить свой объект на массив. Я не знаю, что делает export, но я предполагаю, что он ожидает массив.

Вы можете использовать

get_object_vars()

Или, если это простой объект, вы можете просто придумать его.

$arr = (array) $Object;

Ответ 4

Если у вас есть коллекция объектов stdClass, вы можете попробовать:

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

Ответ 5

Это просто, все, что вам нужно сделать, это что-то вроде этого.

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

Ответ 6

Я получал ту же ошибку, когда пытался вызвать элемент объекта, используя другое возвращаемое значение объекта, например;

$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};

Если кто-то сталкивается с тем же и не может найти ответ, я надеюсь, что это может помочь, потому что я провожу ночь для этого простого решения =)