Laravel 4导出Excel多维查询结果

时间:2014-04-02 01:55:47

标签: excel laravel

我试图获取PHPExcel(而不是Laravel包装器:https://github.com/Maatwebsite/Laravel-Excel)来导出我的视图。我正在运行的查询将多行作为多维数组返回(我使用DB :: select和绑定,因为查询对于Fluent来说有点复杂)

结果如下:

array(3) { 
[0]=> object(stdClass)#224 (3) { 
                                ["name"]=> string(13) "Administrator" 
                                ["TotalRequest"]=> string(6) "100.00" 
                                ["TotalGiven"]=> string(6) "150.00" } 
[1]=> object(stdClass)#226 (3) { 
                                ["name"]=> string(14) "Beta Alpha Psi" 
                                ["TotalRequest"]=> string(6) "363.00" 
                                ["TotalGiven"]=> string(6) "200.00" } 
[2]=> object(stdClass)#227 (3) {    
                                ["name"]=> string(30) "Student Government Association" 
                                ["TotalRequest"]=> string(7) "1225.00" 
                                ["TotalGiven"]=> string(6) "620.00" } 
} 

Laravel-Excel软件包只接受$ data数组(),所以我很困惑如何将多维数组转换为我的视图。如果我使用替代

,我可以让它工作
View::make(xxxx)->with('example', $example)

当我有参与此对象的时候,我是否忽略了如何将$ data作为数组传递?

2 个答案:

答案 0 :(得分:2)

它不是多维array,而是array个对象。如果您使用以下内容将array传递给您的视图:

View::make('xxxx')->with('example', $example)

然后在您的视图中,您可以使用@foreach循环播放,如下所示:

@foreach($example as $item)
    {{ $item->name }}
    {{ $item->TotalRequest }}
    {{ $item->TotalGiven }}
@endforeach

因为,数组包含多个stdClass个对象,第一个对象是(0):

{ 
    ["name"]=> string(13) "Administrator" 
    ["TotalRequest"]=> string(6) "100.00" 
    ["TotalGiven"]=> string(6) "150.00" 
}

因此,您也可以使用类似$example的内容从$example[0]数组中检索第一个对象,并检索您可能使用的第二个对象$example[1],依此类推。

答案 1 :(得分:0)

好吧我建议您只需使用下面的方法直接更改获取模式以返回数组

public function getQueryResult($returnQueryAs = null)'
{
    $tablename = 'YourAwesomeTable';

    if($returnQueryAs == 'array')
    {
        DB::connection()->setFetchMode(PDO::FETCH_ASSOC);
    }

    return DB::table($tablename)->get();
}

然后做这样的事情

public function exportAsExcel()
{
    $filename = 'nameoffile';
    $data = $this->getQueryResult($as = 'array');

    Excel::create($filename, function($excel) use ($filename, $data) {

        // Set the title
        $excel->setTitle($filename);

        // Chain the setters
        $excel->setCreator('Damilola Ogunmoye');

        $excel->sheet('SHEETNAME', function($sheet) use ($data) {


            $sheet->fromArray($data);

        });

    })->download('xls');
}

这将获得一个关联数组,而不是可以直接传递的stdClass对象。