2016-10-29 5 views
4

Я занимаюсь поисковым фильтром, у меня есть 3 входа «муниципалитет», «категория», «ключевое слово», я пытаюсь вставить значение в массив. Вход IF не пуст. как это:Laravel 5.2 - фильтр с массивом

public function search(Request $request) 
    { 


     $filter = array(["'visible', '=' , 1"],["'expire_date', '>', $current"]); 

     if(!empty($termn)){ 
       $filter[] =["'title', 'LIKE' , '%'.$termn.'%'"]; 
     } 
     if(!empty($request->input('category'))){ 
       $filter[] = ["'category_id', '=', $input_category"]; 
     } 
     if(!empty($request->input('municipality_id'))) { 
       $filter[] = ["'municipality_id', '=', $input_municipality"]; 
     } 

     dd($filter); 

     $posts = Post::where($filter)->get(); 
} 

Но она не фильтрует хорошо, дд ($ фильтр) возвращает так: enter image description here

может быть структура массива не в порядке, я попытался также, как это: laravel 5.2 search query но он не работает. БЕЗ дд ($ фильтр) у меня есть эта ошибка:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '. is null and `'municipality_id', '=', 1` is null)' at line 1 (SQL: select * from `posts` where (`'visible', '=' , 1` is null and `'expire_date', '>', 2016-10-29 13:29:30` is null and `'category_id', '=', Scegli una categoria`. . . is null and 'municipality_id', '=', 1 is null))

Спасибо за вашу помощь!

+1

Рассмотрите возможность написания вопросов лучше. Там столько всего. Как «входы» и проверка, если вещи пусты. Было бы лучше, если бы вы только что сказали: '$ filter = [..]; $ posts = Post :: where ($ filter) -> get(); 'дал так и так ошибку. Что я делаю не так? Вы получите больше ответов таким образом. –

ответ

1

Вы используете, где положение неправильно. Смотрите следующую документацию:

Варианта, где положение в модели должно быть отправлены в качестве параметров в прикованных методах (не массив значения) как так:

public function search(Request $request) 
    { 
     $current = Carbon::now(); 
     $current = new Carbon(); 
     $termn = $request->input('keyword'); 
     $input_category = $request->input('category'); 
     $input_municipality = $request->input('municipality_id'); 


     $posts = Post::where('visible', 1)->where('expire_date', '>', $current); 

     if(!empty($termn)){ 
       $posts->where('title', 'LIKE' , '%'.$termn.'%'); 
     } 
     if(!empty($request->input('category'))){ 
       $posts->where('category_id', '=', $input_category); 
     } 
     if(!empty($request->input('municipality_id'))) { 
       $posts->where('municipality_id', '=', $input_municipality); 
     } 

     $post_results = $posts->get(); 
     dd($posts_results); 
} 

Обратите внимание, что вы можете отправить запрос в виде массива для таблиц базы данных (а не моделей), например:

$users = DB::table('posts')->where([ 
    ['visible', '=', '1'], 
    ['expire_date', '>', $current], 
    // ... 
])->get(); 
1

Вы можете приковать функцию where() в query builder, например, как:

$query = Post::where('visible', 1)->where('expire_date', '>', $current); 

if(!empty($termn)){ 
     $query->where('title', 'LIKE', '%'.$termn.'%') 
} 
if(!empty($request->input('category'))){ 
     $query->where('category_id', $input_category) 
} 
if(!empty($request->input('municipality_id'))) { 
     $query->where('municipality_id', $input_municipality) 
} 

$posts = $query->get(); 
Смежные вопросы