recherche

Maison  >  Questions et réponses  >  le corps du texte

Rechercher les colonnes JSON de Laravel dans d'autres tables via association

J'ai essayé d'écrire un code de recherche et voici mon 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();

Mais lorsque j'envoie plan_name dans la demande, le code filtre par nom de service au lieu du nom du plan

J'ai essayé de filtrer les données par nom de plan lors de l'envoi du code du nom de plan dans la demande, mais cela ne fonctionne pas

P粉596161915P粉596161915279 Il y a quelques jours417

répondre à tous(1)je répondrai

  • 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.'%');
        });
    }

    répondre
    0
  • Annulerrépondre