【问题标题】:Laravel 4 Export Excel Multidimensional Query ResultLaravel 4 导出 Excel 多维查询结果
【发布时间】:2014-04-02 01:55:47
【问题描述】:

我正在尝试让 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 array(),所以我很困惑如何将我的多维数组转换为我的视图。如果我使用替代方法,我可以让它工作

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

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

【问题讨论】:

    标签: excel laravel


    【解决方案1】:

    它不是多维的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[0] 之类的方式从$example 数组中检索第一个对象,并使用$example[1] 等方式检索第二个对象。

    【讨论】:

    • 但是我不能将 ->with() 函数与 Laravel-Excel 结合使用(它只接受这样的视图:View::make('view.name', $data))。我需要把这些数据变成一个直数组。
    • 不管你如何传递数据,但你也可以使用View::make('view.name', array('data' => $data))
    • 是的,但是“stdClass 类的对象无法转换为字符串”是我尝试 foreach 传递的数据时遇到的错误。
    • 那么你应该可以做{{ $item->name }},因为它是一个对象并且里面有name, TotalRequest and TotalGiven属性,确保你做的正确。
    • ->with('key', 'value')->withKey('value')loadView() 的支持是最近添加的。请参阅 github 自述文件。
    【解决方案2】:

    我建议您只需更改 Fetch Mode 以直接使用如下方法返回一个数组

    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 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-31
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      相关资源
      最近更新 更多