Laravel - Столбец не найден: 1054 Неизвестный столбец 'vw_winning_report.id' - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь сгенерировать отчет из пяти таблиц, комбинируя их как представления 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)

В чем причина проблемы и как ее устранить.

Спасибо

1 Ответ

0 голосов
/ 29 июня 2019

Решено. Я только что добавил

-> orderByRaw ('creation_at DESC');

к запросу и все работает.

Спасибо всем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...