Laravel Excel从具有自定义标题的模型导出

时间:2016-10-11 19:49:19

标签: php laravel

我正在尝试使用http://www.maatwebsite.nl/laravel-excel/docs

将多个模型中的一些数据导出到一个包含自定义标题名称的Excel工作表中

在Laravel Excel中使用->fromModel($model)方法,将从表中给出的属性名称中获取标题,仅包含该特定选定模型的标题。

我已将我的用户模型与->hasOne()关系设置为3个其他模型。然而,它只显示了excel中主要模型的内容。 有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

由于你没有指定模型名称,对于这个答案,我假设你有一个User和Type模型,而User模型是这样的:

class User extends Authenticatable
{
    // ....

    public function type()
    {
        return $this->hasOne('App\UserType');
    }
}

我假设您正在尝试执行以下操作来导出数据:

$sheet->fromModel(User::with('type')->get());

如果您执行dd(User::with('type')->get());,您会看到集合中每个项目的attributes属性仅包含用户模型的属性,这就是您只获取有关用户的信息的原因模型。

要解决此问题,您需要一些解决方案:

  1. 使用没有关系的Eloquent执行查询。如下所示:

    $data = User::join('types', 'types.user_id', '=', 'users.id')->get();
    

    在这种情况下,您会看到集合中每个项目的属性都包含所有请求的列。

  2. 在SQL / MySQL上创建一个视图,并创建与该视图关联的模型。这样,对于Laravel而言,您将从单个表中检索数据。

  3. 我首选的方法是第一个,这是一个关于如何导出数据的示例:

    Excel::create('Filename', function($excel){
        $excel->sheet('Sheetname', function($sheet) {
            $data = User::join('types', 'types.user_id', '=', 'users.id')->get();
            $sheet->fromModel($data);
        });
    
    })->export('xls');