Как получить от одного до трех значений из поля со списком в Eloquent Laravel? - PullRequest
0 голосов
/ 26 января 2020

У меня есть фильтр с тремя флажками, каждый из которых имеет значение «вопрос», «партнерство», «жалоба». но когда я выбираю две данные из флажка (ex.complaint & question), отправленного на контроллер, и использую функцию orWhere, данные являются ошибкой (все появляются). Что я делаю не так?

$data = BrandEnquiry::whereHas('brand', function($query) use ($post){
                $query->where('id_brand', '=' , $post['id_brand']);
            });

            if(isset($post['question'])){
                $data->where(function ($key) use ($post){
                    $key->orWhere('subject', 'LIKE', '%'.$post['question']);
                });
            }

              if(isset($post['complaint'])){
                $data->where(function($q)use($post){
                        $q->orWhere('subject', 'LIKE', '%'.$post['complaint']);

                    });

            }


            if(isset($post['partnership'])){
                $data->where(function($q)use($post){
                        $q->orWhere('subject', 'LIKE', '%'.$post['partnership']);

                    });

            }




            $data = $data->orderBy('updated_at','desc')
            ->with('brandOutlet')
            ->with('user')
            ->get();

и HTML

<div class="row">
                <div class="col-lg-8 chxBox">
                    <label>Subject:</label>


                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" value="question" id="question" name="question">
                        <label class="form-check-label" for="defaultCheck1">
                        Question
                        </label>
                    </div>
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" value="complaint" id="complaint" name="complaint">
                        <label class="form-check-label" for="defaultCheck1">
                        Complaint
                        </label>
                    </div>
                    <div class="form-check">
                        <input class="form-check-input" type="checkbox" value="partnership" id="partnership" name="partnership" >
                        <label class="form-check-label" for="defaultCheck1">
                        Partnership
                        </label>
                    </div>
                </div>

Спасибо за продвижение

Ответы [ 2 ]

2 голосов
/ 26 января 2020

Вам необходимо объединить все orWhere вместе:

$data = BrandEnquiry::whereHas('brand', function($query) use ($post){
    $query->where('id_brand', '=' , $post['id_brand']);
});

$data->where(function ($key) use ($post){
    if(isset($post['question'])) 
        $key->where('subject', 'LIKE', '%'.$post['question']);
    if(isset($post['complaint']))
        $key->orWhere('subject', 'LIKE', '%'.$post['complaint']);
    if(isset($post['partnership']))
        $key->orWhere('subject', 'LIKE', '%'.$post['partnership']);
});


$data = $data->orderBy('updated_at','desc')
->with('brandOutlet')
->with('user')
->get();
1 голос
/ 26 января 2020

Вы можете использовать когда метод в laravel. Метод when выполняет данное замыкание только тогда, когда первый параметр имеет значение true. Если первый параметр имеет значение false, Закрытие не будет выполнено. Ваш код должен выглядеть следующим образом.

$data = BrandEnquiry::whereHas('brand', function($query) use ($post){
                $query->where('id_brand', '=' , $post['id_brand']);
            })->when(isset($post['question']), function($query, $post) {
                return $query->where('subject', 'LIKE', '%'.$post['question']);
            })->when(isset($post['complaint']), function($query, $post) {
                return $query->orWhere('subject', 'LIKE', '%'.$post['complaint']);
            })->when(isset($post['partnership']), function($query, $post) {
                return $query->orWhere('subject', 'LIKE', '%'.$post['partnership']);
            })
            ->with('brandOutlet')
            ->with('user')
            ->orderBy('updated_at','desc')
            ->get();

читать документы здесь laravel когда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...