suchen

Heim  >  Fragen und Antworten  >  Hauptteil

„Laravel Eloquent DB::Raw-Abfrage unterstützt nicht die gleichzeitige Verwendung von WHERE-Anweisung und Unterabfrage“

Wenn ich die folgende Abfrage in mein SQL-Tool einfüge, läuft sie einwandfrei, gibt aber bei der Ausführung durch Laravel keine Zeilen zurück.

$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
";

Aufgrund der Komplexität der eigentlichen Abfrage konnte ich sie nicht ganz in eine eloquente Abfrage umwandeln, also habe ich sie mit DB::select(DB::raw($searchQuery)); ausgeführt.

Wenn ich where main_query.cl_count > 1 entferne, funktioniert die Abfrage einwandfrei. Was führt dazu, dass es fehlschlägt, und wie kann ich den Code neu schreiben?

P粉191610580P粉191610580377 Tage vor556

Antworte allen(1)Ich werde antworten

  • P粉517814372

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

    尝试以下代码,由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();

    Antwort
    0
  • StornierenAntwort