Несколько, где есть запрос в люмен / Laravel Проблема - PullRequest
0 голосов
/ 16 апреля 2020

Я просто хочу попросить помощи в этой конкретной ситуации c. Итак, в моем приложении мы хотим иметь глобальную функцию поиска, где вы помещаете 1 строку, а затем мы должны искать эту строку в нескольких случаях в БД, используя laravel eloquent, однако это стало проблематичным c, так как у меня есть несколько где есть, а затем у меня есть счет (который я покажу позже). Может ли кто-нибудь помочь мне с этой проблемой? Было бы очень признательно

Вот код

    $result = [];
    $sort_order = "DESC";
    $post_param = $request->json()->all();
    $filters = $post_param['filters'];

    if($post_param['sortOrder'] > 0)
    {
        $sort_order = "ASC";
    }

    $financing_applications   = $this->financing_application->model();

    $data                     = $financing_applications::with('financing_application_data.business_type','financing_product_approval.financing_product')->withCount('financing_application_attachments as attachment');

    foreach($filters as $key => $filter){
        $value = $filter['value'];
        if($value != ""){
            switch($key){
                case "start_date_range":
                    $data   = $data->where('submission_date','>=',$value);
                    break;

                case "end_date_range":
                    $data   = $data->where('submission_date','<=',$value);
                    break;

                case "status":
                    $data   = $data->where($key,"LIKE","%$value%");
                    break;

                case "attachment_count":
                    $data   = $data->having('attachment_count','=',$value);
                    break;

                case "company_name":
                case "telephone":
                case "city":
                    if($key == "telephone"){
                        $key = "personal_phone_no";
                    }
                    if($key == "city"){
                        $key = "company_city";
                    }
                    $data   = $data->whereHas('financing_application_data',function($query) use ($key,$value) {
                        $query->where($key,"LIKE","%$value%");
                    });
                    break;

                case "business_type":
                    $data->whereHas('financing_application_data.business_type',function($query) use ($key,$value){
                        $query->where('business_type_parent','LIKE',"%$value%");
                    });
                    break;

                case "loan_type":
                case "loan_partner":
                    $data->whereHas('financing_product_approval.financing_product',function($query) use ($key,$value){
                        $query->where($key,"LIKE","%$value%");
                    });
                    break;

                case "global": //This is the problem
                    $data   = $data->whereHas('financing_application_data.business_type',function($query) use ($key,$value){
                        $query->whereRaw("business_type_parent LIKE ? ",["%$value%"]);
                    });
                    $data   = $data->whereHas('financing_product_approval.financing_product',function($query) use ($key,$value){
                        $query->whereRaw("loan_type LIKE ? OR loan_partner LIKE ?",["%$value%","%$value%"]);
                    });
                    break;
            }
        }
    }

    $total_records  = $data->count();
    $result         = $data->orderBy($post_param['sortField'],$sort_order)->skip($post_param['first'])->take($post_param['rows'])->get();

    return [
        "financing_applications" => $result,
        "total_records" => $total_records,
        "message" => "",
        "status" => 200,
    ];

Итак, в этом случае мой ожидаемый результат просто будет в состоянии использовать все случаи и объединить его в «глобальный» случай в выражении switch.

Есть ли кто-нибудь, кто имеет такую ​​же проблему и имеет решение? Вышеуказанный глобальный не работает, так как где и где ожидается как И, а не ИЛИ ... и я искал решение, но это слишком сложно, я не знаю точное ключевое слово для этой проблемы

Вот часть необходимой информации

"laravel/lumen-framework": "5.3.*"

Обновление: извините, если кто-то из вас принял мою проблему, поэтому проблема заключается только в случае «глобальный», теперь в другом случае используется синтаксис «whereHas» фильтровать отношения. В случае, когда global должен иметь возможность комбинировать "Where" и "WhereHas", я сделал это, но из-за отсутствия "orWhereHas" (насколько я знаю), поэтому он вернется пустым, так как он распознает оператор "AND"

Здесь я даю вам json полезную нагрузку:

{
"filters": {
    "global": {
        "matchMode": "undefined",
        "type": "string",
        "value": "Man"
    },
    "start_date_range": {
        "matchMode": "undefined",
        "type": "date",
        "value": ""
    },
    "end_date_range": {
        "matchMode": "undefined",
        "type": "date",
        "value": ""
    },
    "company_name": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    },
    "business_type": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    },
    "telephone": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    },
    "city": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    },
    "attachment_count": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    },
    "loan_type": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    },
    "loan_partner": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    },
    "status": {
        "matchMode": "undefined",
        "type": "string",
        "value": ""
    }
},
"first": 0,
"rows": 8,
"sortOrder": -1,
"sortField": "submission_date"
}

Таким образом, цель состоит в том, чтобы фильтр ['global'] ['value'] возвратил что-то, вот и вся проблема, надеюсь это проясняет некоторую проблему понимания

1 Ответ

0 голосов
/ 16 апреля 2020

Я нашел способ обойти эту проблему, я должен заменить синтаксис whereHas на has, который может иметь ИЛИ logi c, что мне нужно в этом случае.

Спасибо

...