Laravel - Неизвестный столбец 'subscription_date' в 'групповой выписке' - PullRequest
0 голосов
/ 15 июня 2019

Я хочу выполнить функцию агрегирования и добиться определенного результата, который группируется по дате, удаляя время из datetime.

Всякий раз, когда я группирую по created_at, ошибки не будет, но она будет группироваться по datetime, и результат не будет точным.

У меня есть этот запрос:

Ваш запрос кажется правильным, но я думаю, что вы забыли получить ключевое слово as,

$revenuereports = DB::table('cloudsubscriptions as c')
 ->select(
       'c.service_name', 
        DB::raw('COUNT(*) as total_users'), 
        DB::raw('SUM(c.amount) as total_amount'),
        DB::raw('DATE(c.created_at)as subscription_date') // you forgot as here
  ) 
 ->groupBy('subscription_date')                                                            
 ->orderByRaw('c.created_at DESC');

    $render=[];
    if(isset($request->start_date) && isset($request->end_date))
    {
        $revenuereports=$revenuereports->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))
    {
        $revenuereports=$revenuereports->where('created_at',$request->start_date);

        $render['start_date']=$request->start_date;
    }        
    if(isset($request->service_name))
    {
        $revenuereports=$revenuereports->where('service_name','like','%'.$request->service_name.'%');
        $render['service_name']=$request->service_name;
    }

    //dd($revenuedetails->toSql());
    $revenuereports= $revenuereports->orderBy('created_at','DESC');
    $revenuereports= $revenuereports->paginate(15);
    $revenuereports= $revenuereports->appends($render);
    $data['revenuereports'] = $revenuereports;

return view('report.revenueReport',$data);

Я ожидаю, что результат будет отфильтрован по subscription_date (без времени)

"SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец« subscription_date »в« групповом операторе »(SQL: выберите количество (*) как совокупное значение из cloudsubscriptions как c, где created_at между 2019-01 -01 и 2019-06-30 группировать по subscription_date) "

Как мне решить, пожалуйста?

Ответы [ 2 ]

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

Ваш запрос кажется правильным, но я думаю, что вы забыли получить ключевое слово as,

$revenuereports = DB::table('cloudsubscriptions as c')
     ->select(
           'c.service_name', 
            DB::raw('COUNT(*) as total_users'), 
            DB::raw('SUM(c.amount) as total_amount'),
            DB::raw('DATE(c.created_at)as subscription_date') // you forgot as here
      ) 
     ->groupBy('subscription_date')                                                            
     ->orderByRaw('c.created_at DESC')
     ->get(); 
0 голосов
/ 15 июня 2019

У вас есть поле в базе данных? Тогда вам следует забыть добавить as непосредственно перед subscription_date

$revenuereports = DB::table('cloudsubscriptions as c')
     ->select('c.service_name', DB::raw('COUNT(*) as total_users'), DB::raw('SUM(c.amount) as total_amount'),DB::raw('DATE(c.created_at) as subscription_date'))
     ->groupBy('subscription_date')                                                            
     ->orderByRaw('c.created_at DESC')
     ->get();  

Кстати, я не думаю, что вам нужен псевдоним таблицы для этого запроса.

$revenuereports = DB::table('cloudsubscriptions')
     ->select('service_name', DB::raw('COUNT(*) as total_users'), DB::raw('SUM(amount) as total_amount'),DB::raw('DATE(created_at) as subscription_date'))
     ->groupBy('subscription_date')                                                            
     ->orderBy('created_at', 'desc')
     ->get();  

Вы можете изменить свой MySQL strict->false и попробовать.

Вы найдете его, config/database.php > connections > strict (default it is true, just change it to false.)

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