ホームページ  >  に質問  >  本文

関連付けを介して他のテーブルのLaravelのJSON列を検索します

検索コードを書いてみました。これが私のコードです:

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


    if ($request->サービス名) {
               $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->ja','Like','%'.$plan_name.'%');
            });
       }

        $services->get();
を返す

しかし、リクエストで plan_name を送信すると、コードはプラン名ではなくサービス名でフィルタリングします

リクエストでプラン名のコードを送信するときにプラン名でデータをフィルターしようとしましたが、機能しません

P粉596161915P粉596161915259日前398

全員に返信(1)返信します

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

    返事
    0
  • キャンセル返事