【问题标题】:Generate excel based on the query from database using vue and laravel maatwebsite package使用 vue 和 laravel maatwebsite 包根据数据库查询生成 excel
【发布时间】:2020-01-30 14:32:02
【问题描述】:

基本上我得到了一个查询来获取基于日期fromto 的所有记录。我在 laravel 中使用 maatwebsite 包。问题是如果我单击生成按钮,它将不会生成 excel 文件。我正在使用这个包的 2.x 版本,因为它是稳定的。有人可以帮我弄这个吗?我只想以excel格式打印查询结果。我不会将版本更改为 3.x ,因为如果这样做,其他组件的导入功能将不适用于 3.x 版本。非常感谢

我的控制器,不要介意 dd 仅用于测试目的

  public function generateReport(Request $request){

        $date = \DB::table('checkers')
        ->where('remarks_id',2)
        ->join('schedules','schedules.id','=','checkers.schedule_id')
        ->join('teachers','schedules.teacher_id','=','teachers.id')
        ->join('subject_codes','subject_codes.id','=','schedules.subject_code_id')
        ->join('remarks','remarks.id','=','checkers.remarks_id')
        ->where('checkers.created_at', '=>', $request->from)
        ->where('checkers.created_at', '=<', $request->to)
        // ->whereBetween('checkers.created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()])
        ->select('teachers.fullname','subject_codes.subject_description','remarks.remarks_desc','checkers.created_at')
        ->get(); 

        dd($request->from);

        return Excel::download('users.xlsx');
    }

如果我点击生成按钮,我会收到 Laravel Excel method [download] does not exist 的错误

另一个问题是即使我 dd 请求,它返回 null 我什至不知道发生了什么,我在 vue 中得到了 v-model 以获取请求仍然无法显示。

我的 vue 组件

         <form action="">
                   <div class="col-xs-4 form-group">
                        <label>Start Date</label>
                       <date-picker name="from" id="from" v-model="from" :config="options" ></date-picker>
                    </div>
                    <div class="col-xs-4 form-group">
                        <label>End Date</label>
                          <date-picker name="to" id="to" v-model="to" :config="options" ></date-picker>
                    </div>
               </form>
            </div>
            <div class="box-footer">
                  <a type="button" href="/generate" >
                    <button  class="btn btn-info">
                        Generate Excel
                    </button>
                </a>
            </div>

脚本,在routes.php中,生成路径为/generate,指向控制器方法generateReport

      data(){
            return{
                    from: new Date(),
                    options: {
                    format: 'YYYY-MM-DD',
                    showClear: true,
                    showClose: true,
                    },

                    to: new Date(),
                    options: {
                    format: 'YYYY-MM-DD',
                    showClear: true,
                    showClose: true,
                    } 
            }
        },
        created() {
            console.log('Component mounted.')
        },
        methods:{
            generate(){
                axios.get('/generate')
                    .then((res)=>{
                        console.log('asd')
                    })
            }
        }

【问题讨论】:

  • 您是否包含了Excel 外观本身? use Maatwebsite\Excel\Facades\Excel;
  • 是的,先生@niklaz
  • Excel::download('users.xlsx') - 下载什么?您甚至没有在此处的任何地方指定实际的 data - 类应该猜到这一点,还是您认为这是如何工作的?
  • 那个包似乎有相当不错的文件,一目了然。我建议你去实际阅读一下这些东西是如何在那里工作的——目前,这并没有给人一种你实际上尝试过那么多的印象。
  • 那么您可能必须从创建实际的 Excel 文档本身开始,因为现在您似乎连任何可以下载的东西都没有。 docs.laravel-excel.com/2.1/export/export.html, docs.laravel-excel.com/2.1/export/sheets.html, docs.laravel-excel.com/2.1/export/array.html

标签: javascript php laravel vue.js


【解决方案1】:

也许尝试通过$from = Input::get('from');从您的表单中获取输入

            Excel::create('file_name', function ($excel) {
                            $excel->sheet('Export', function ($sheet) {
                            // fetch your data
$from = Input::get('from');
$to = Input::get('to');
        $date = \DB::table('checkers')
                ->where('remarks_id',2)
                ->join('schedules','schedules.id','=','checkers.schedule_id')
                ->join('teachers','schedules.teacher_id','=','teachers.id')
                ->join('subject_codes','subject_codes.id','=','schedules.subject_code_id')
                ->join('remarks','remarks.id','=','checkers.remarks_id')
                ->where('checkers.created_at', '=>', $from)
                ->where('checkers.created_at', '=<', $to)
                // ->whereBetween('checkers.created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()])
                ->select('teachers.fullname','subject_codes.subject_description','remarks.remarks_desc','checkers.created_at')
                ->get(); 
                            foreach($date as $temp) {

                            $sheet->appendRow('test1','test2');
    }
    })->export('xls');

【讨论】:

  • 好让我试试这个先生
  • 我收到了这个错误continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"先生
  • 请粘贴整个函数。
猜你喜欢
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多