Laravel - Нарушение ограничения целостности: 1052 Столбец 'create_at', где предложение неоднозначно в фильтре Laravel - PullRequest
2 голосов
/ 21 июня 2019

Я использую Laravel 5.8 для фильтрации по дате и имени.Когда я щелкнул по поиску, я получил эту ошибку:

"SQLSTATE [23000]: нарушение ограничения целостности: 1052 Столбец 'create_at' в выражении where неоднозначен (SQL: выберите количество (*) в качестве агрегата)с services внутреннее объединение cloudsubscriptions на services. name = cloudsubscriptions. service_name, где created_at между 2019-05-31 и 2019-06-29 и name как% Learnersway% groupDATE (cloudsubscription.created_at), services. id, services. name) ◀ "

Вот мой код:

public function revenueReport(Request $request)
{
$data['title'] = 'Revenue Report';

$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(DB::raw('DATE(c.created_at)'), 'service_name')                                                          
 ->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]);
        //$revenuedetails=$revenuedetails->whereBetween(date('users.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);
} 

Ответы [ 2 ]

1 голос
/ 21 июня 2019

укажите, из какой таблицы, например, c.created_at или users.created_at

1 голос
/ 21 июня 2019

в своем коде вы не указали, какую таблицу create_at вы хотите использовать для фильтра, поэтому проблема решается.

Чтобы решить проблему, вам нужно указать столбец создал__ с именем таблицы.

Обновите до следующего кода, он будет работать.

public function revenueReport(Request $request)
{
$data['title'] = 'Revenue Report';

$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(DB::raw('DATE(c.created_at)'), 'service_name')                                                          
 ->orderByRaw('c.created_at DESC');

    $render=[];
    if(isset($request->start_date) && isset($request->end_date))
    {
        $revenuereports=$revenuereports->whereBetween('subscription_date',[$request->start_date,$request->end_date]);
        //$revenuedetails=$revenuedetails->whereBetween(date('users.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('subscription_date',$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('subscription_date','DESC');
    $revenuereports= $revenuereports->paginate(15);
    $revenuereports= $revenuereports->appends($render);
    $data['revenuereports'] = $revenuereports;

return view('report.revenueReport',$data);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...