Как запросить массив категорий, чтобы получить сообщения в Laravel? - PullRequest
0 голосов
/ 27 января 2020

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

отправка данных на сообщения url:

    public function filter(Request $request){
        $data = $request->all();
        $cat_Name="";
        if(!empty($data['categoryFilter'])){
            foreach($data['categoryFilter'] as $cat){
                if(empty($cat_Name)){
                    $cat_Name = "&cat_Name=".$cat;
                }else{
                    $cat_Name .= "-".$cat;
                }
            }
        }

        $finalUrl = "posts"."?".$cat_Name;
        return redirect::to($finalUrl);
    }

получение данных из URL и их разбиение на массив:

    if(!empty($_GET['cat_Name'])){
        $categoryArray = explode('-',$_GET['cat_Name']);
    }

теперь я хочу, чтобы запрос получал сообщения, в которых существовали категории в $ categoryArray.

1 Ответ

0 голосов
/ 27 января 2020

Поскольку у вас есть отношение многие ко многим между Post и Category,

, вы можете просто использовать whereHas , чтобы найти сообщения, которые имеют категории с этим cat_name:

Post::whereHas('categories', function($q) use ($categoryArray) {
    return $q->whereIn('cat_name', $categoryArray);
});

и просто используйте request, чтобы получить параметры вместо $_GET:

public function yourActionName(Request $request)
{
    if(!empty($request->input('cat_Name')){
       $categoryArray = explode('-', $request->input('cat_Name'));
       $posts = Post::whereHas('categories', function($q) use ($categoryArray) {
           return $q->whereIn('cat_name', $categoryArray);
       })->get(); 
    } else {
       ...
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...