【发布时间】:2019-11-11 00:17:35
【问题描述】:
我正在尝试通过使用以下查询将五个表组合为 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'
];
}
然后是索引页面和导出功能的Controller。 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' in 'order Clause' (SQL: select DATE(created_at),
msisdn,game_code,game_namefromvw_winning_reportorder byvw_winning_report.idasc limit 1000 offset 0)
问题的原因是什么,我该如何解决。
谢谢
【问题讨论】:
-
如果将
WinningReport::query()->select(...)更改为WinningReport::select(...)会怎样? -
我这样做了,但问题仍然存在
-
我知道为什么查询中有 ORDER BY 子句。不过你可以试试this
-
我的意思是“我有没有的想法..”