2017-08-03 69 views
0

私は試験/クイズアプリを開発しており、ユーザーのためにテスト/クイズを作成していますが、今は特定の試験で現在の生徒などのデータを含むスプレッドシートを作成する必要があります、成績表などがあります。多対多リレーションを持つPHPExcel Laravel Excelを生成

Buこれまで管理していたのは、すべてのユーザーが `fromModel 'を使ってシートを作成したものですが、関係や制約を使うと空のシートが得られます。

私はこのモデルがあります:

<?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'); 
    } 

... Userモデル(省略) クラスのユーザーが認証可能 { ... //リレーションズ パブリック関数の答えを(拡張) { リターンを$ this-> hasMany(Answer :: class); }

public function exams() 
    { 
     return $this->belongsToMany('EMMA5\Exam')->withPivot('active', 'started_at', 'ended_at', 'location_id'); 
    } 

...

そして私は、与えられた試験のユーザーとシート作成しようとしています: を(これは私の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'); 
    } 

そして、私は空のシートを得る。 私はすでに->fromArray()->fromModel()で試しました。 入力があれば分かります。

答えて

0

時間がたつと誰も答えませんでしたが、解決策が見つかりました。 他人に役立つかどうかわかりません。

結果を得る方法はExcel Laravelでは読み取れませんでした。だから私はコールバックでヘルパー関数を作成しました。

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); } これは、Excel Laravelで簡単に読み取ることができる簡易版のコレクションを返します。

関連する問題