Я пытаюсь сгенерировать отчет из пяти таблиц, комбинируя их как представления Mysql, используя следующий запрос:
CREATE VIEW vw_winning_report AS
SELECT
id as tid,
msisdn,
game_code,
game_name,
prize,
total_per_day,
user_channel,
created_at
FROM trivial_winners
UNION ALL
SELECT
id as tid,
msisdn,
game_code,
game_name,
prize,
total_per_day,
user_channel,
created_at
FROM predict_and_win
UNION ALL
SELECT
id as tid,
msisdn,
game_code,
game_name,
prize,
total_per_day,
user_channel,
created_at
FROM party_with_bbn
UNION ALL
SELECT
id as tid,
msisdn,
game_code,
game_name,
prize,
total_per_day,
user_channel,
created_at
FROM happy_hour
UNION ALL
SELECT
id as tid,
msisdn,
game_code,
game_name,
prize,
total_per_day,
user_channel,
created_at
FROM grand_price
Затем я создал класс модели в Laravel с именем WinningReport.
class WinningReport extends Model
{
protected $table = 'vw_winning_report';
protected $fillable = [
'tid',
'msisdn',
'game_code',
'game_name',
'prize',
'total_per_day',
'user_channel',
'created_at'
];
}
Затем контроллер для страницы индекса и функция экспорта.exportwinningreport для экспорта, в то время как WinningReportReport (Request $ request) для страницы индекса.
public function winningreportReport(Request $request)
{
$data['title'] = 'Winning Report';
$winners = DB::table('vw_winning_report')
->select(
'msisdn',
'game_code',
'game_name',
DB::raw('DATE(created_at) as created_date')
)
->orderByRaw('created_at DESC');
$render=[];
if(isset($request->msisdn))
{
$winners=$winners->where('msisdn','like','%'.$request->msisdn.'%');
$render['msisdn']=$request->msisdn;
}
if(isset($request->game_code))
{
$winners=$winners->where('game_code',$request->game_code);
$render['game_code']=$request->game_code;
}
if(isset($request->start_date) && isset($request->end_date))
{
$winners=$winners->whereBetween('created_at',[$request->start_date,$request->end_date]);
$render['start_date']=$request->start_date;
$render['end_date']=$request->end_date;
}elseif(isset($request->start_date))
{
$winners=$winners->where('created_at',$request->start_date);
$render['start_date']=$request->start_date;
}
$winners= $winners->orderBy('created_at','DESC');
$winners= $winners->paginate(15);
$winners= $winners->appends($render);
$data['winners'] = $winners;
return view('report.winningreportReport',$data);
}
public function exportwinningreport()
{
return Excel::download(new WinningreportExport, 'winningreport.xlsx');
}
Затем для экспорта, когда нажата кнопка отправки, мы имеем:
class WinningreportExport implements FromQuery, WithHeadings, ShouldAutoSize, WithEvents
{
use Exportable;
/**
* @return \Illuminate\Support\Collection
*/
public function query()
{
return WinningReport::query()->select(
DB::raw("DATE(created_at)"),
'msisdn',
'game_code',
'game_name'
);
}
public function headings(): array
{
return [
'Date Created',
'MSISDN',
'Game Code',
'Game Name',
];
}
public function registerEvents(): array
{
return [
AfterSheet::class => function(AfterSheet $event) {
$cellRange = 'A1:D1'; // All headers
$event->sheet->getDelegate()->getStyle($cellRange)->getFont()->setSize(14);
},
];
}
}
страница представления индекса работает отлично, но когда я нажал на кнопку «Отправить», я получил эту ошибку:
«SQLSTATE [42S22]: столбец не найден: 1054 неизвестный столбец« vw_winning_report.id »в»предложение order '(SQL: выберите DATE (созданный_кат), msisdn
, game_code
, game_name
из vw_winning_report
упорядочить по vw_winning_report
. id
с ограничением 1000 смещения 0)
В чем причина проблемы и как ее устранить.
Спасибо