2016-10-27 4 views
0

У меня есть 4 Выберите в HTMLusers, industry, lead_source и country. Эти значения имеют значение по умолчанию, которое равно . Выберите.Выбор запроса зависит от многих возможностей

Я хочу сделать запрос, чтобы выбрать строку из таблицы приводит, где выбраны только выбранные значения.

Это HTML-код:

<select class="form-control" name="lead_source"> 
     <option value="select">-SELECT-</option> 
     @foreach($leadssource as $leadsource) 
       <option value="{{ $leadsource -> name }}">{{ $leadsource -> name }}</option> 
     @endforeach 
</select> 

<select class="form-control" name="industry"> 
    <option value="select">-SELECT-</option> 
    @foreach($industries as $industry) 
     <option value="{{ $industry -> name }}">{{ $industry -> name }}</option> 
    @endforeach 
</select> 

<select class="form-control" name="user"> 
    <option value="select">-SELECT-</option> 
    @foreach($users as $user) 
     <option value="{{ $user -> name }}">{{ $user -> name }}</option> 
    @endforeach 
</select> 

<select class="form-control" name="country"> 
    <option value="select">-SELECT-</option> 
    @foreach($countries as $country) 
     <option value="{{ $country -> name }}">{{ $country -> name }}</option> 
    @endforeach 
</select> 

Я хочу, чтобы выбрать только те значения, которые не равен первый вариант, который выбрать.

Я попытался:

Чтобы использовать если заявления и проверить все имеющиеся возможности, но это не хорошо, потому что если я добавил еще один вариант, то я должен добавить еще кучу если заявления ,

Вот пример моего первого, если утверждение, если выбраны все опции:

if($leadSource != 'select' && $industry != 'select' && $user != 'select' && $country != 'select'){ 
    $leads = Main::where('lead_source', '=', $leadSource) 
       -> where('industry', '=', $industry) -> where('country', '=', $country) -> where('user', '=', $user) -> paginate(50); 


    return view('filter.show') -> withLeads($leads); 
} 
+0

У вас есть сообщение об ошибке? когда вы фильтруете. –

+0

Вам необходимо фильтровать для каждого условия индивидуально, а не для всех вместе. – jeroen

+0

Нет, все работает отлично, и я получаю результаты, которые хочу, но проблема в том, что у меня есть множество операторов if для каждой возможности. – Frank

ответ

1

Вы можете попробовать, как:

$query = Main::query(); 

if(some_filter) { 
    $query->where(...) 
} 
if(some_more_filter) { 
    $query->where(...) 
} 

$leads = $query->paginate(50); 

Update

Вы можете цепи запрос в зависимости от условий:

$query = Main::query(); 

if($leadSource != 'select') { 
    $query->where('lead_source', '=', $leadSource) 
} 

if($industry != 'select') { 
    $query->where('industry', '=', $industry) 
} 

if($user != 'select') { 
    $query->where('user', '=', $user) 
} 

if($country != 'select') { 
    $query->where('country', '=', $country) 
} 

$leads = $query->paginate(50); 
+0

. Проблема заключается в том, что мне нужно сделать много условий для каждой возможности, потому что пользователь может выбрать один или два или три или четыре вместе. . – Frank

+0

Можете ли вы показать свой полный запрос, чтобы я мог попытаться уменьшить это? –

+0

Обязательно. '$ ведет = Main :: where ('lead_source', '=', $ leadSource) -> где ('industry', '=', $ industry) -> где ('user_id' , '=', $ userId) -> где ('страна', '=', $ страна) -> paginate (100); ' – Frank

Смежные вопросы