cari

Rumah  >  Soal Jawab  >  teks badan

"Laravel Eloquent DB::Pertanyaan mentah tidak menyokong penggunaan pernyataan WHERE dan subquery pada masa yang sama"

Apabila saya menampal pertanyaan berikut ke dalam alat SQL saya, ia berfungsi dengan baik, tetapi mengembalikan sifar baris apabila dijalankan melalui Laravel.

$sql = "
SELECT main_query.* FROM (
    SELECT
        c.id,
        c.name,
        c.order,
        cd.case,
        (SELECT count(*) from logs cl
            where
            c.id = cl.id
            and cl.status = 'OPEN'
        ) as cl_count,
        sdsc.task
    FROM `table` c
    INNER JOIN `table2` cd ON (c.id = cd.id)
    LEFT JOIN `table3` sdsc ON (c.id = sdsc.id)
    WHERE
        c.status = 'NEW'
    GROUP BY c.id
    ORDER BY cd.updated_at DESC                    
) main_query                
where main_query.cl_count > 1
GROUP BY main_query.id
ORDER BY main_query.updated_at DESC
limit 0,20
";

Disebabkan kerumitan pertanyaan sebenar, saya tidak dapat menukarnya kepada pertanyaan Eloquent, jadi saya menggunakan DB::select(DB::raw($searchQuery)); untuk melaksanakannya.

Jika saya mengalih keluar where main_query.cl_count > 1 pertanyaan berfungsi dengan baik. Apakah yang menyebabkannya gagal, dan bagaimana saya boleh menulis semula kod tersebut?

P粉191610580P粉191610580363 hari yang lalu551

membalas semua(1)saya akan balas

  • P粉517814372

    P粉5178143722024-01-17 11:29:37

    Cuba kod berikut, yang dihasilkan oleh https://sql2builder.github.io/

    DB::query()->fromSub(function ($query) {
        $query->from('table')
            ->select('table.id', 'table.name', 'table.order', 'table2.case', 'table3.task')
            ->on(function ($query) {
                $query->where('table.id','=','table2.id');
            })
            ->on(function ($query) {
                $query->where('table.id','=','table3.id');
            })
            ->where('table.status','=','NEW')
            ->groupBy('table.id')
            ->orderBy('','desc');
    },'main_query')
    ->select('main_query.*')
    ->where('main_query.cl_count','>',1)
    ->groupBy('main_query.id')
    ->orderBy('','desc')
    ->get();

    balas
    0
  • Batalbalas