2015-05-15 25 views
8

śledzę this documentationobiektu klasy stdClass nie może być zamieniony na ciąg - laravel

wdrożyć Eksport do Excela w moim laravel 4 projektu.

jestem tak stara, aby wygenerować plik Excel z tablicy tak:

//$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'); 

Ale to podnosi wyjątek:

Object of class stdClass could not be converted to string 

Co robię źle?

UPDATE:

Tried to:

$data = get_object_vars($data); 

co skutkuje:

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

następująco:

$data = (array)$data; 

Wyniki w początkowym błędem.

+0

Myślę, że coś przeoczyłeś w swojej konfiguracji. Sprawdź dwukrotnie plik 'app/config.php' dla dostawcy usług i aliasów. –

Odpowiedz

17

$data rzeczywiście jest tablicą, ale to składa się z obiektów.

Konwersja jego zawartość do tablicy przed jej tworzenia:

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

Najpierw trzeba zmienić obiekt na tablicę. Nie wiem, co robi export, ale zakładam, że oczekuje tablicy.

Można użyć

get_object_vars()

Albo jeśli jego prosty obiekt, można po prostu typecast go.

$arr = (array) $Object;

+0

Czy możesz var_dump ($ data) i jego obiektu lub tablicy? I nie wspomniałeś, która linia generuje błąd "Obiekt klasy stdClass nie mógł zostać przekonwertowany na ciąg" w pierwszej kolejności. –

2

Jeśli masz zbiór obiektów stdClass, można spróbować z tym:

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

Spróbuj to prosta w jednej linii kodu : -

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

Nadzieja to pomaga :)

+2

To powinna być właściwa odpowiedź, ze względu na swoją prostotę ta musi być właściwą odpowiedzią. Pracowałem dla mnie. Wielkie dzięki. –

+1

Brakowało mi prawdziwego .. thx! –

Powiązane problemy