生成具有多对多关系的 PHPExcel Laravel Excel
Generate PHPExcel Laravel Excel with many to many relations
我正在开发一个 exam/quiz 应用程序,它会为用户创建 tests/quizzes,现在我必须创建一组包含数据的传播sheet,例如当前学生在给定的考试、成绩表等。
Bu 到目前为止,我设法创建的是一个 sheet,所有用户都使用 `->fromModel',但是如果我使用任何关系和/或约束,我会得到一个空的 sheet。
我有这个型号:
<?php
namespace EMMA5;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Exam extends Model
{
//
protected $dates = ['created_at', 'updated_at', 'applicated_at'];
protected $fillable = [
'applicated_at',
'duration',
'board_id',
'passing_grade',
'annotation'
];
public function board()
{
return $this->belongsTo('EMMA5\Board');
}
public function users()
{
return $this->belongsToMany('EMMA5\User')->withPivot('active', 'started_at', 'ended_at', 'seat', 'location_id');
}
...
用户模型(略)
class 用户扩展可验证
{
...
//关系
public 函数答案()
{
return $this->hasMany(答案::class);
}
public function exams()
{
return $this->belongsToMany('EMMA5\Exam')->withPivot('active', 'started_at', 'ended_at', 'location_id');
}
...
我正在尝试为给定考试与用户创建 sheet:
(这是来自我的ExamController.php)
/**
* Returns a spreadsheet with only the students that were present
*
* @return PHPOffice
*/
public function gradesSpreadshet(Exam $exam)
{
$grade = new Grade;
$gradedStudents = $grade->allStudents($exam)->toArray();
//dd(\EMMA5\Exam::find(195)->with('users')->get());
//dd($exam->answers->answer);
$data = $exam->users;
return Excel::create("FinalGrades", function ($excel) use($data) {
//Create sheet to be able to return something to keep on testing
//Another sheet
$excel->sheet('Primera hoja', function ($sheet) use($data) {
$sheet->fromArray($data);
});
})->export('xlsx');
}
我得到一个空 sheet。
我已经尝试过 ->fromArray()
和 ->fromModel()
。
将不胜感激。
一段时间过去了,没有人回答,但我找到了解决办法。
不知道对别人有没有帮助。
ExcelLaravel无法读取我获取结果的方式。所以我创建了一个带有回调的辅助函数。
public static function collectionToArray(Array $collect = null)
{
return array_map(function ($array) use($collect)
{
foreach ($array as $key => $value) {
$resultArray[$key] = $value;
}
return $resultArray;
}, $collect);
}
returns 本集的简化版本 Excel Laravel 可以轻松阅读。
我正在开发一个 exam/quiz 应用程序,它会为用户创建 tests/quizzes,现在我必须创建一组包含数据的传播sheet,例如当前学生在给定的考试、成绩表等。
Bu 到目前为止,我设法创建的是一个 sheet,所有用户都使用 `->fromModel',但是如果我使用任何关系和/或约束,我会得到一个空的 sheet。
我有这个型号:
<?php
namespace EMMA5;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Exam extends Model
{
//
protected $dates = ['created_at', 'updated_at', 'applicated_at'];
protected $fillable = [
'applicated_at',
'duration',
'board_id',
'passing_grade',
'annotation'
];
public function board()
{
return $this->belongsTo('EMMA5\Board');
}
public function users()
{
return $this->belongsToMany('EMMA5\User')->withPivot('active', 'started_at', 'ended_at', 'seat', 'location_id');
}
... 用户模型(略) class 用户扩展可验证 { ... //关系 public 函数答案() { return $this->hasMany(答案::class); }
public function exams()
{
return $this->belongsToMany('EMMA5\Exam')->withPivot('active', 'started_at', 'ended_at', 'location_id');
}
...
我正在尝试为给定考试与用户创建 sheet: (这是来自我的ExamController.php)
/**
* Returns a spreadsheet with only the students that were present
*
* @return PHPOffice
*/
public function gradesSpreadshet(Exam $exam)
{
$grade = new Grade;
$gradedStudents = $grade->allStudents($exam)->toArray();
//dd(\EMMA5\Exam::find(195)->with('users')->get());
//dd($exam->answers->answer);
$data = $exam->users;
return Excel::create("FinalGrades", function ($excel) use($data) {
//Create sheet to be able to return something to keep on testing
//Another sheet
$excel->sheet('Primera hoja', function ($sheet) use($data) {
$sheet->fromArray($data);
});
})->export('xlsx');
}
我得到一个空 sheet。
我已经尝试过 ->fromArray()
和 ->fromModel()
。
将不胜感激。
一段时间过去了,没有人回答,但我找到了解决办法。 不知道对别人有没有帮助。
ExcelLaravel无法读取我获取结果的方式。所以我创建了一个带有回调的辅助函数。
public static function collectionToArray(Array $collect = null)
{
return array_map(function ($array) use($collect)
{
foreach ($array as $key => $value) {
$resultArray[$key] = $value;
}
return $resultArray;
}, $collect);
}
returns 本集的简化版本 Excel Laravel 可以轻松阅读。