【问题标题】:Laravel - Column not found: 1054 Unknown column 'vw_winning_report.id'Laravel - 找不到列:1054 未知列“vw_winning_report.id”
【发布时间】: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_name from vw_winning_report order by vw_winning_report.id asc limit 1000 offset 0)

问题的原因是什么,我该如何解决。

谢谢

【问题讨论】:

  • 如果将WinningReport::query()->select(...) 更改为WinningReport::select(...) 会怎样?
  • 我这样做了,但问题仍然存在
  • 我知道为什么查询中有 ORDER BY 子句。不过你可以试试this
  • 我的意思是“我有没有的想法..”

标签: mysql laravel


【解决方案1】:

已解决。我刚刚添加了

->orderByRaw('created_at DESC');

到查询,它的工作原理。

谢谢大家

【讨论】:

    猜你喜欢
    • 2015-02-22
    • 2021-08-08
    • 2018-02-21
    • 2015-12-08
    • 2018-11-02
    • 2019-10-02
    • 2020-05-13
    • 2017-04-03
    相关资源
    最近更新 更多