Heim  >  Fragen und Antworten  >  Hauptteil

Durchsuchen Sie die JSON-Spalten von Laravel in anderen Tabellen über die Zuordnung

Ich habe versucht, einen Suchcode zu schreiben, und das ist mein Code:

$services = Service::query()->with('plans')->latest();


    if ($request->service_name) {
               $services = $services->whereRaw("CONVERT(JSON_EXTRACT(name, '$.ar') using 'utf8') LIKE  '%$request->service_name%' ")
                ->orWhereRaw("CONVERT(JSON_EXTRACT(name, '$.en') using 'utf8') LIKE  '%$request->service_name%' ")
                ->orWhereRaw("CONVERT(JSON_EXTRACT(name, '$.he') using 'utf8') LIKE  '%$request->service_name%' ");     
    }

        if ($request->plan_name) {
            $plan_name = $request->plan_name;
            $services = $services->whereHas('plans', function ($q) use ($plan_name) {
                $q->where('name->en','Like','%'.$plan_name.'%');
            });
       }

        return $services->get();

Aber wenn ich plan_name in der Anfrage sende, filtert der Code nach Dienstname statt nach Planname

Ich habe versucht, Daten nach Plannamen zu filtern, als ich den Plannamencode in der Anfrage gesendet habe, aber es funktioniert nicht

P粉596161915P粉596161915209 Tage vor357

Antworte allen(1)Ich werde antworten

  • P粉807471604

    P粉8074716042024-02-27 13:45:32

    if ($request->service_name && !$request->plan_name) { // When only service name provided
        $services = $services->whereRaw("CONVERT(JSON_EXTRACT(name, '$.ar') using 'utf8') LIKE  '%$request->service_name%' ")
                ->orWhereRaw("CONVERT(JSON_EXTRACT(name, '$.en') using 'utf8') LIKE  '%$request->service_name%' ")
                ->orWhereRaw("CONVERT(JSON_EXTRACT(name, '$.he') using 'utf8') LIKE  '%$request->service_name%' ");
    }
    
    if ($request->plan_name && !$request->service_name) { // When only plan name provided
        $plan_name = $request->plan_name;
        $services = $services->whereHas('plans', function ($q) use ($plan_name) {
            $q->where('name->en','Like','%'.$plan_name.'%');
        });
    }

    Antwort
    0
  • StornierenAntwort