类stdClass的对象无法转换为字符串 - laravel

时间:2015-05-15 12:54:08

标签: php excel laravel

我正在关注this documentation

在我的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;

导致初始错误。

6 个答案:

答案 0 :(得分:29)

在一行代码中尝试这个简单: -

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

希望有所帮助:)

答案 1 :(得分:22)

$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(....

答案 2 :(得分:4)

您可能需要先将对象更改为数组。我不知道export做了什么,但我认为它期待一个数组。

您可以使用

get_object_vars()

或者如果它是一个简单的对象,你可以对其进行类型转换。

$arr = (array) $Object;

答案 3 :(得分:2)

如果你有stdClass对象的集合,你可以试试这个:

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

答案 4 :(得分:0)

这很容易,您需要做的就是这样抓住您的内容

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

答案 5 :(得分:0)

当我试图通过使用另一个对象的返回值来调用对象元素时,我收到了相同的错误;

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

如果有人面对相同但找不到​​答案,我希望这可以有所帮助,因为我花了一个晚上来解决这个简单的解决方法=)