PHP Laravel: требуется помощь, поскольку код не дает надлежащего результата

#php #laravel #model-view-controller

#php #laravel #модель-представление-контроллер

Вопрос:

Приложение построено в Laravel. Я пытаюсь вставить еще несколько фильтров поиска в существующий. какой-то фильтр поиска работает, а какой-то нет. Не могли бы вы, пожалуйста, заглянуть в мой код и поправить меня в том, что я делаю неправильно?

Вот как выглядит моя страница. Ранее было только 2 поля поиска Ссылка и ключевое слово. Я включил 4 других поля поиска, называемых Сектором, статусом бизнеса, оборотом и сортировкой по. введите описание изображения здесь Фильтр поиска сектора и оборота работает, в то время как поле бизнес-статуса и поле сортировки не работают. И я не понимаю, почему?

 <form  method="get" action="" class="">
  <label for="cat">
    <p style="margin-top: 6px;">
      <b>Sector</b>
    </p>
  </label>
  <select class="form-control" name="cat" id="cat">
    <option value="" label="Please select">Please select</option>
    <option value="1" label="Technology" <?php if(isset($_GET["cat"]) amp;amp; $_GET["cat"] == 1){ echo 'selected="selected"';} ?>>Technology</option>
    <option value="12" label="Medical" <?php if(isset($_GET["cat"]) amp;amp; $_GET["cat"] == 12){ echo 'selected="selected"';} ?>>Medical</option>
    ...
  </select>
  <select class="form-control" id="business_status" name="business_status" aria-describedby="business_status">
    <option value="" label="Please select">Please select</option>
    <option value="1" label="Live" <?php if(isset($_GET["business_status"]) amp;amp; $_GET["business_status"] == 1){ echo 'selected="selected"';} ?>>Live</option>
    <option value="2" label="Sold" <?php if(isset($_GET["business_status"]) amp;amp; $_GET["business_status"] == 2){ echo 'selected="selected"';} ?>>Sold</option>
    --
  </select>
  <select name="turnover" id="turnover">
    <option value="" label="Please select">Please select</option>
    <option value="1" label="Up to £500k" <?php if(isset($_GET["turnover"]) amp;amp; $_GET["turnover"] == 1){ echo 'selected="selected"';} ?>>Up to £500k</option>
    <option value="2" label="£500k - £1m" <?php if(isset($_GET["turnover"]) amp;amp; $_GET["turnover"] == 2){ echo 'selected="selected"';} ?>>£500k - £1m</option>
    --     
  </select>
  <select class="form-control" id="sortby" name="sortby" aria-describedby="sortby" >
    <option value="0" <?php if(isset($_GET["sortby"]) amp;amp; $_GET["sortby"] == 0){ echo 'selected="selected"';} ?> >Newest To Oldest</option>
    <option value="1" <?php if(isset($_GET["sortby"]) amp;amp; $_GET["sortby"] == 1){ echo 'selected="selected"';} ?> >Oldest To Newest</option>
    --
  </select>
  <button type="submit">Search</button>
</form>
 

и это код под app/businesses.php страница

 public function scopeSearch($query, $request)
{
    if (isset($request->cat)) {
        $query->where('company_category_id', $request->cat);
    }
    if (isset($request->turnover)) {
        $turnoverrange = $request->turnover;
        if ($turnoverrange == 1) {
            $query->where('turnover', '<=', 300000);
        } else if ($turnoverrange == 2) {
            $query->where('turnover', '>=', 300000);
            $query->where('turnover', '<=', 1000000);
        } 
    }         
    if (isset($request->business_status)) {
        $query->where('company_status_id', $request->business_status);
    }      
    if (isset($request->sortby)) {
        $sortbyvalue = $request->sortby;
        if ($sortbyvalue == 0) {
            $query->orderby('updated', 'desc');
        } else if ($sortbyvalue == 1) {
            $query->orderby('updated', 'asc');
        } else if ($sortbyvalue == 2) {
            $query->orderby('turnover', 'asc');
        } else if ($sortbyvalue == 3 ) {
            $query->orderby('turnover', 'desc');
        } 
    }
    return $query;
}
 

Таблица базы данных — это company

введите описание изображения здесь

пожалуйста, сообщите мне, что я делаю неправильно. В частности, я не понимаю, почему функция сортировки по не работает, поскольку она проверяет данные в той же таблице

Бизнес-контроллер выглядит так

 class BusinessesController extends Controller
{
    public function index(Request $request){
        $myUser = $request->get('myUser');

        SavedSearch::processSavedSearchAction($myUser, $request);

        $page = 1;
        if(isset($_GET["page"])){
            $page = $_GET["page"];
        }

        $businesses = Businesses::Live()->Search($request)->SortBy()->paginate(20)->appends(request()->except(['page','_token']));

        if(is_null($request->input('region')) amp;amp; is_null($request->input('cat')) amp;amp; is_null($request->input('date')) amp;amp; is_null($request->input('turnover')) amp;amp; is_null($request->input('keyword'))){
            
                    return Redirect::route('businessShow', ['id' => $businesses[0]->company_id]);
          
        }

        $info = View::make('blocks/business-listing-info', [
                'count' => sizeof(Businesses::Live()->Search($request)->get()),
                'page' => $page
            ])->render();



        $dataTagArray = array(
            'businesses' => View::make('blocks/business-listing', [
                'businesses' => $businesses
            ])->render(),
            'business_list_info' => $info,
            'saved_seach_button' => SavedSearch::getSavedSearchForm($myUser, $request)
        );

        $pageData = Page::getPageDataForIdentifier("businessListing", $dataTagArray, $myUser);

        return view('page/show', ['myUser' => $myUser, 'pageData' => $pageData]);
    }
 

Комментарии:

1. Как область поиска используется в вашем контроллере?

2. @igp — я не уверен, как это выяснить. Я редактирую чужой код. Не могли бы вы предложить

3. I am not sure how to find that out — похоже scopeSearch() , это метод в вашей модели («область видимости»). Но когда вы отправляете свою форму, ее обрабатывает метод в контроллере, а не область видимости. Возможно, контроллер вызывает эту область, но мы не можем видеть, если или как это происходит. Где находится метод контроллера, который обрабатывает отправку формы?

4. @Don’Tp — я обновил вопрос и добавил код из Businessess.controller.php . Можете ли вы взглянуть, пожалуйста

5. Хорошо, похоже, есть одна очевидная потенциальная проблема с сортировкой, верно? В этой строке ваш контроллер вызывает область действия вашей модели: $businesses = Businesses::Live()->Search($request) ... — но почему эта строка включает SortBy() (что означает сортировку по nothing)? Ваша область уже обрабатывает сортировку?