область фильтра не возвращает правильный результат - PullRequest
0 голосов
/ 16 февраля 2019

эй, я исправил этот код, чтобы отфильтровать и найти в базе данных по двум спискам данных, поэтому я запрограммировал в моем контроллере этот код

  $films = Film::filter()->get();

, а в моей модели:

 public function scopeFilter($query)
    {
        $directors = request('director')[0];
        $genres=request('genre')[0];
        if (isset($directors) && $directors != []) {
            foreach ($directors as $director) {
                $query->orwhere('director', $director);
            }
            if( isset($genres) && $genres!=[] ){
                    $query->where(function ($query) use ($genres){
                        foreach ($genres as $genre) {
                            $query->orwhere('genre', $genre);
                        }
                    });
            }
        }else{
            if( isset($genres) && $genres!=[] ){
                foreach ($genres as $genre) {
                    $query->orwhere('genre', $genre);
                }
            }
        }
        return $query;
    }

в конце между двумя переменными использования или вместо, и может ли кто-нибудь это исправить, спасибо

1 Ответ

0 голосов
/ 18 февраля 2019

Вы получаете ошибку?Когда вы говорите, что это не работает, что конкретно не работает?Являются ли данные, которые он возвращает, неверными?

Кроме того, как выглядит содержимое массивов $directors и $genres?Они просто массив заполнен идентификаторами?Если да, вы можете попробовать выполнить условия whereIn вместо того, чтобы перебирать все элементы:

public function scopeFilter($query)
{
    $directors = request('director')[0];
    $genres=request('genre')[0];

    // Assuming they look like this:
    // $directors = [1,2,3];
    // $genres = [4,5,6];

    if (isset($directors) && count($directors)) {
        $query->whereIn('director', $directors);
    }
    else if(isset($genres) && count($genres)) {
        $query->whereIn('genre', $genres);
    }

    return $query;
}
...