Laravel: выбор результатов на основе входного параметра

#php #laravel #laravel-4

#php #laravel #laravel-4

Вопрос:

У меня есть поисковый запрос в моем контроллере

 public function byQuery($query)
    {
        $q = $this->prepareQuery($query);
        if(str_contains($q,'zealand'))
        {
        $q = 'nz';
        }
        $titles = Title::where('suburb', 'LIKE', $q)
                                ->orWhere('postcode', 'LIKE', $q)
                                ->orWhere('title', 'LIKE', $q)
                                ->orWhere('country', 'LIKE', $q)
                                ->orWhere('state', 'LIKE', $q);

        if (isset($input['type']) amp;amp; $input['type'] != '')
        {
            $titles = $titles->where('type', 'like', '%'. $input['type'].'%');
        } 
            $titles = $titles->orderBy('href', 'ASC')
                    ->orderBy(DB::raw('RAND()'))
                    ->paginate(36);

            return $titles;

    }
  

Если я ищу поиск, например

 search?q=new zealand
  

Он вернет все результаты в моей базе данных, которые соответствуют Новой Зеландии

Если я ищу

    search?q=new zealandamp;type=sold
  

Я хочу, чтобы if возвращал все результаты из моей базы данных, которые соответствуют новой Зеландии, а тип продан.

Пока это не работает. Он возвращает только все результаты из моей базы данных и не ограничивает их только проданными результатами.

Ответ №1:

$input не определено (по крайней мере, я не вижу его в опубликованном вами коде), поэтому isset() всегда будет возвращаться false . Используйте входной класс, который уже может выполнять проверку:

 if (Input::has('type'))
{
   $titles = $titles->where('type', 'like', '%'. rawurldecode(Input::get('type')).'%');
} 
  

Примечание: я добавил rawurldecode() , поскольку в вашем примере «новая Зеландия» будет передана как «новая Зеландия», и это необходимо учитывать, если вы хотите, чтобы оно соответствовало правильно.

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

1. Привет, Дэмиен, спасибо за помощь. Я добавил класс ВВОДА в свое пространство имен и заменил старый код ввода вашим, но он по-прежнему не возвращает правильные результаты?

2. Если вы запустите сгенерированный запрос к базе данных, найдет ли он результаты?

3. ДА.. у меня есть четыре типа «продано», «купить», «арендовать», «предложить», у всех есть результаты, но запрос не будет их разделять, он вернет все четыре типа

4. Это может означать, что вы неправильно строите запрос (проверьте сгенерированный sql)

5. Привет, Дэмиен, может быть, я использую ->orWhere(‘почтовый индекс’, ‘НРАВИТСЯ’, $ q) -> orWhere(‘заголовок’, ‘НРАВИТСЯ’, $ q) -> orWhere(‘страна’, ‘НРАВИТСЯ’, $ q) -> orWhere (‘состояние’, ‘LIKE’, $q); таким образом, запрос вернет, где тип «продан» или где страна, например, Новая Зеландия, а тип «купить»?