我正在尝试使用http://www.maatwebsite.nl/laravel-excel/docs
将多个模型中的一些数据导出到一个包含自定义标题名称的Excel工作表中在Laravel Excel中使用->fromModel($model)
方法,将从表中给出的属性名称中获取标题,仅包含该特定选定模型的标题。
我已将我的用户模型与->hasOne()
关系设置为3个其他模型。然而,它只显示了excel中主要模型的内容。
有没有办法做到这一点?
答案 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
属性仅包含用户模型的属性,这就是您只获取有关用户的信息的原因模型。
要解决此问题,您需要一些解决方案:
使用没有关系的Eloquent执行查询。如下所示:
$data = User::join('types', 'types.user_id', '=', 'users.id')->get();
在这种情况下,您会看到集合中每个项目的属性都包含所有请求的列。
在SQL / MySQL上创建一个视图,并创建与该视图关联的模型。这样,对于Laravel而言,您将从单个表中检索数据。
我首选的方法是第一个,这是一个关于如何导出数据的示例:
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');