2017-02-21 81 views
1

随着category_parent在过滤器中应用它带来的从242添加排序依据被删除我的过滤器

results下降到13,但只要我在为了增加所花费的结果反馈给全款:

http://www.bristolfolkhouse.co.uk/results?keyword=&category_parent=6&course_week=&month=&category_child=&day=&time_of_day=&tutor=&order_by=asc

我结果的方法可以在这里找到: http://pastebin.com/G46vGRmu

这里是我的搜索表单部分: http://pastebin.com/2yaababn

我不明白为什么 - 任何人都可以帮忙吗?

代码:

public function results(Request $request){ 
    // dd($request->all()); 
    $courses = Course::select(['*']); 
    // if only parent category 
    if($request->has('category_parent') AND !$request->has('category_child')) 
    { 
     $parent_category[] = (integer) $request->get('category_parent'); 
     $child_categories = Category::where('parent_id', $request->get('category_parent'))->lists('id')->toArray(); 
     $all_categories = array_merge($parent_category, $child_categories); 
     $courses = $courses->whereHas('categories', function ($query) use ($all_categories) { 
      $query->where(function ($query) use ($all_categories) { 
       foreach ($all_categories as $category) $query->orWhere('category_id', '=', $category); 
      }); 
     }); 

     // else with child category 
    } elseif($request->has('category_parent') AND $request->has('category_child')) { 
     $courses = $courses->whereHas('categories', function ($query) use ($request) { 
      $query->where('category_id', '=', $request->get('category_child')); 
     }); 
    } 

    if($request->has('course_week')) { 
     $courses = $courses->where('course_weeks', $request->get('course_week')); 
    } 

    // if set start date 
    if($request->has('start_date')) { 
     $start_date_begin = substr($request->get('start_date'), 0, 10); 
     $start_date_finish = substr($request->get('start_date'), -10); 
     if(preg_match("/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/", $start_date_begin) AND preg_match("/^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/", $start_date_finish)) { 
      $carbon_begin = Carbon::createFromFormat('d/m/Y', $start_date_begin); 
      $carbon_finish = Carbon::createFromFormat('d/m/Y', $start_date_finish); 
      $courses = $courses->where('start_date', '>=', $carbon_begin->startOfDay()); 
      $courses = $courses->where('start_date', '<=', $carbon_finish->endOfDay()); 
     } 
    } 
    if($request->has('month')){ 
     $month  = $request->get('month'); 
     /* $courses = $courses->whereRaw('extract(month from start_date) = ?', [$month]); */ 
     $courses = $courses->whereMonth('start_date', '=', $month); 
    } 
    /* $courses = $courses->paginate(10); 
    echo "<pre>";print_r($courses);die; */ 

    if($request->has('tutor')) { 
     $courses = $courses->where('tutor_id', $request->get('tutor')); 
    } 

    if($request->has('day')) { 
     $courses = $courses->where('course_day', $request->get('day')); 
    } 

    //time_of_day 
    if($request->has('time_of_day')) { 
     //start_date_time 
     if($request->get('time_of_day') == 'am') { 
      $courses = $courses->whereBetween(DB::raw('TIME(`start_date`)'), ['00:00:01', '16:59:59']); 
     } elseif($request->get('time_of_day') == 'pm') { 
      $courses = $courses->whereBetween(DB::raw('TIME(`start_date`)'), ['17:00:00', '23:00:00']); 
     } 
    } 

    if($request->has('keyword')) { 
     $categorys_ids = Category::select('id')->where('name', 'LIKE', '%'.$request->get('keyword').'%')->lists('id')->toArray(); 
     $tags_ids = Tag::select('id')->where('name', 'LIKE', '%'.$request->get('keyword').'%')->lists('id')->toArray(); 
     $courses = $courses->where(function ($query) use ($request, $categorys_ids, $tags_ids) { 
      $query 
      ->orWhere('name', 'LIKE', '%'.$request->get('keyword').'%') 
      ->orWhere(function ($query) use ($request, $categorys_ids) { 
       $query->whereHas('categories', function ($query) use ($request, $categorys_ids) { 
        $query->whereIn('category_id', $categorys_ids); 
       }); 
      })->orWhere(function ($query) use ($request, $tags_ids) { 
       $query->whereHas('tags', function ($query) use ($request, $tags_ids) { 
        $query->whereIn('tag_id', $tags_ids); 
       }); 
      }); 
     }); 
    } 

    if($request->has('order_by')) { 
     $courses = Course::orderBy('start_date', $request->order_by); 
    } 

    $tutors = Tutor::orderBy('last_name', 'asc')->take(12)->get(); 
    $courses = $courses->paginate(10); 
    $info = Terminfo::first(); 
    $course_categories = Category::where('parent_id', '=!', '')->get(); 

    if(isset($_GET['category_parent'])) 
    { 
     $current_course_category = Category::where('parent_id', $_GET['category_parent'])->get(); 
     $current_course_category_first = Category::where('id', $_GET['category_parent'])->first(); 
    } 
    return view('frontend.pages.results', compact('courses', 'tutors', 'course_categories', 'current_course_category', 'current_course_category_first', 'info')); 
} 

模板:

<?php 

    // $categories = \App\Category::select('id', 'name', 'parent_id')->get(); 
    $categories = \App\Category::has('courses')->get(); 

    $tutors = \App\Tutor::select('id', DB::raw('CONCAT(first_name, " ", last_name) AS full_name'))->orderBy('last_name', 'asc')->lists('full_name', 'id')->toArray(); 
    $weeks = \App\Course::select('course_weeks')->lists('course_weeks', 'course_weeks'); 

    $current_day = date('d'); 
    $current_month = date('m'); 

    // dd($weeks); 

    foreach ($weeks as $week) { 
     if($week == 'course_weeks'){ 

     }else{ 
      $weeklist[] = $week; 
     } 
    } 

    sort($weeklist); 

    $days = [ 
      '' => 'Day of the week', 
      ' ' => 'Show All', 
      'Mon' => 'Monday', 
      'Tue' => 'Tuesday', 
      'Wed' => 'Wednesday', 
      'Thu' => 'Thursday', 
      'Fri' => 'Friday', 
      'Sat' => 'Saturday', 
      'Sun' => 'Sunday', 
    ]; 

    $time_of_day = [ 
     '' => 'Time of the day', 
     ' ' => 'Show All', 
     'am' => 'Day', 
     'pm' => 'Evening' 
    ]; 
?> 

<div class="col-sm-4"> 
</div> 
<div class="col-sm-12 course-extras"> 
    {!! Form::open(['method' => 'get', 'url' => '/results', 'id' => 'search_course_form']) !!} 
     <p class="refine-block">Refine your search</p> 
     <div class="row refine-search"> 
      <div class="col-sm-3 search-bar-space"> 
       {!! Form::text('keyword', isset($_GET['keyword']) ? $_GET['keyword'] : null, ['class' => 'form-control', 'placeholder' => 'Keyword']) !!} 
      </div> 

      <div class="col-sm-2 search-bar-space "> 
       <select name="category_parent" id="category_parent" class="category_parent form-control select-arrow" style="width:100%"> 
        <option value="">Category</option> 
        <option value="">Show All</option> 
        @foreach($categories as $category) 
         @if($category->parent_id == 0) 
          <option value="{{ $category->id }}" 
          @if(isset($_GET['category_parent']) AND $_GET['category_parent'] == $category->id) 
           selected 
          @endif 
          >{{ $category->name }}</option> 
         @endif 
        @endforeach 
       </select> 
      </div> 

      {{-- <div class="col-sm-2 search-bar-space"> 
       {!! Form::select('course_week', $weeks, isset($_GET['course_week']) ? $_GET['course_week'] : null, ['class' => 'form-control']) !!} 
      </div> --}} 

      <div class="col-sm-2 search-bar-space"> 
       <select class="form-control" name="course_week"> 
        <option value="" selected="">Course Duration</option> 
        <option value=" ">Show All</option> 
        {{-- {{ dd($weeklist) }} --}} 
        @foreach($weeklist as $list) 
         @if($list == 0) 
          <option value="{{ $list }}" 
           @if(isset($_GET['course_week']) && $_GET['course_week'] == $list) 
            selected 
           @endif 
          >1 Day</option> 
         @elseif ($list == 1) 
          <option value="{{ $list }}" 
           @if(isset($_GET['course_week']) && $_GET['course_week'] == $list) 
            selected 
           @endif 
          >{{ $list }} Week</option> 
         @else 
          <option value="{{ $list }}" 
           @if(isset($_GET['course_week']) && $_GET['course_week'] == $list) 
            selected 
           @endif 
          >{{ $list }} Weeks</option> 
         @endif 
        @endforeach 
       </select> 
      </div> 

      <div class="col-sm-2 search-bar-space"> 
       <select class="form-control" name="month"> 
        <option value="">Select Month</option> 
        <option value="">Show All</option> 
        <option value="01" @if(isset($_GET['month']) AND $_GET['month'] == '01') selected @endif >January</option> 
        <option value="02" @if(isset($_GET['month']) AND $_GET['month'] == '02') selected @endif >February</option> 
        <option value="03" @if(isset($_GET['month']) AND $_GET['month'] == '03') selected @endif >March</option> 
        <option value="04" @if(isset($_GET['month']) AND $_GET['month'] == '04') selected @endif >April</option> 
        <option value="05" @if(isset($_GET['month']) AND $_GET['month'] == '05') selected @endif >May</option> 
        <option value="06" @if(isset($_GET['month']) AND $_GET['month'] == '06') selected @endif >June</option> 
        <option value="07" @if(isset($_GET['month']) AND $_GET['month'] == '07') selected @endif >July</option> 
        <option value="08" @if(isset($_GET['month']) AND $_GET['month'] == '08') selected @endif >August</option> 
        <option value="09" @if(isset($_GET['month']) AND $_GET['month'] == '09') selected @endif >September</option> 
        <option value="10" @if(isset($_GET['month']) AND $_GET['month'] == '10') selected @endif >October</option> 
        <option value="11" @if(isset($_GET['month']) AND $_GET['month'] == '11') selected @endif >November</option> 
        <option value="12" @if(isset($_GET['month']) AND $_GET['month'] == '12') selected @endif >December</option> 
       </select> 
       <!--input type="text" class="form-control" name="start_date" value="{!! isset($_GET['start_date']) ? $_GET['start_date'] : '' !!}" placeholder="Date Range"/--> 
      </div> 

      <div class="col-sm-3 search-bar-space"> 
       <div align="center"> 
        <button type="button" class="options-btn pull-left clickMe less-border hidden-tablet" style="width:50%">MORE OPTIONS<i class="fa fa-angle-down options-arrow"></i></button> 


        <button type="button" class="options-btn pull-left clickMe2 less-border display-tablet" style="width:50%">MORE</button> 

        <button type="submit" class="find-btn" style="width:50%">FIND</button> 
       </div> 
      </div> 
     </div> 

     {{-- <div class="row grey-back list-padding " id="clickBox" style="display: none"> --}} 
     <div class="row grey-back list-padding " id="clickBox" style="display: {{ Route::currentRouteName() == 'pages.results' ? 'block':'none' }}"> 
      <div class="col-sm-3 search-bar-space"> 
       <select name="category_child" id="category_child" class="category_child form-control back-white" style="width:100%"> 
        <option value="" data-parent-id="0">Subcategory</option> 
        <option value="">Show All</option> 
        @foreach($categories as $category) 
         @if($category->parent_id != 0) 
          <option value="{{ $category->id }}" data-parent-id="{{ $category->parent_id }}" 
           @if(isset($_GET['category_child']) AND $_GET['category_child'] == $category->id) 
           selected 
           @endif 
          >{{ $category->name }}</option> 
         @endif 
        @endforeach 
       </select> 
      </div> 
      <div class="col-sm-3 search-bar-space"> 
       {!! Form::select('day', $days, isset($_GET['day']) ? $_GET['day'] : null, ['class' => 'form-control back-white']) !!} 
      </div> 
      <div class="col-sm-3 search-bar-space"> 
       {!! Form::select('time_of_day', $time_of_day, isset($_GET['time_of_day']) ? $_GET['time_of_day'] : null, ['class' => 'form-control back-white']) !!} 
      </div> 
      <div class="col-sm-3 search-bar-space"> 
       {!! Form::select('tutor', ['' => 'Tutors'] + $tutors, isset($_GET['tutor']) ? $_GET['tutor'] : null, ['class' => 'form-control back-white']) !!} 
      </div> 
     </div> 
     <br><hr> 
    {!! Form::close() !!} 
</div> 
+0

请显示您的代码,建立查询 – Jerodev

+0

对不起! http://pastebin.com/2yaababn –

回答

0

你正在创建一个全新的查询时,你在你的代码上线83添加顺序这将覆盖$courses对象,并删除所有现有过滤器。

$courses = Course::orderBy('start_date', $request->order_by); 

您应该更改它,以便将其添加到现有查询中。它应该是这样的:

$courses = $courses->orderBy('start_date', $request->order_by); 
+0

非常感谢,但我将如何继续现有的查询 - 您在上面建议的代码表示$查询不可用。 –

+0

$ courses = $ courses-> orderBy('start_date',$ request-> order_by); –

+0

我的不好,变量确实是'$ courses'。 – Jerodev

0

我在你的代码中发现什么,你希望有条件的顺序由创建课程模式的新查询,你犯的错误,只需更换下面的代码,

if($request->has('order_by')) { 
     $courses->orderBy('start_date', $request->order_by); 
}