array_merge (): аргумент №2 не является массивом в боковом фильтре - PullRequest
1 голос
/ 28 мая 2020

enter image description here У меня проблемы по одному вопросу. в функции фильтра боковой панели, когда я нажимаю на флажок, он будет отображаться правильно в списке. но когда я снял флажок, он покажет «array_merge (): Argument # 2 не является массивом», эта ошибка отображается при проверке элемента. когда я устанавливаю флажок, он сгенерирует этот URL «http://abc.local/genre-tags/?id%5B%5D=31». и когда я снял флажок, он покажет URL-адрес «http://abc.local/genre-tags/» с ошибкой. далее контроллер и код js.

// Контроллер

public function genresFilter ()
    {
        $sortBy = Input::get('sortBy', 'id');
        $dir    = Input::get('direction', 'desc');

        $orderBy = [
                        'tracks'=>[   'order_by'=>$sortBy, 'direction'=>$dir ]
                    ];

        $id = Input::get('id');

        $category = Category::where('slug','music-genre')->first();

        $tag = Tag::with('tracks','elements')->where('category_id', $category->id)->whereIn('id', $id)->get();
        echo "<pre>";
        print_r($tag->toArray());
        die();

        $this->layout->content = View::make('public.tags.genres', compact('tag'));
    }

// js

//Sidebar Filter Genre Tracks
$(document).ready(function () {
    $('.genreTag').on('change', function (e)
    {

        $('input.filter-playlist, .popularGenreTag, .mood-emotion, .production-type, .vocals, .all-tracks, .last-year, .last-month, .last-week, .last-day').each(function() {
            var $this = $(this);
            $this.prop('checked', false);
            $this.parent().find('> div').removeClass('chk-checked').addClass('chk-unchecked');
        });

        e.preventDefault();
        id = [];

        $('.genreTag:checked').each(function()
        {
            id.push($(this).attr('id'));
        });

        $.get("/genre-tags/", {id: id}, function(data)
        {
            hideLoader();
            refreshedPage = $(data);
            newDemo = refreshedPage.find(".libraryWrapper, .albumWrapper, .composersWrapper, .albumsListWrapper, .albumsWrapper, .accountWrapper, .distributionsWrapper, .PaymentsWrapper, .contactWrapper, .contractsWrapper, .toolsWrapper, .blogWrapper, .pageWrapper, .cartWrapper, .pageWrapper").html();

            $('.libraryWrapper, .albumsWrapper, .albumWrapper, .composersWrapper, .albumsListWrapper, .accountWrapper, .distributionsWrapper, .PaymentsWrapper, .contactWrapper, .contractsWrapper, .toolsWrapper, .blogWrapper, .pageWrapper, .cartWrapper, .pageWrapper').html(newDemo);
            activatePlayer()
            initTrackInfo();
        });
    });
});


//route
Route::get('genre-tags/', ['as' => 'tag.popular-genres', 'uses' => 'SideFilterController@genresFilter']);

//checkbox blade file

<li class="lib">
            <label><input class="genreTag"  id="{{ $genreTag->id}}" type="checkbox" name="" value="{{ $genreTag->name }}">{{{ $genreTag->name }}} ({{count(json_decode($genreTag->elements, true))+ count(json_decode($genreTag->tracks, true))}}) </label>
        </li>

1 Ответ

1 голос
/ 28 мая 2020

Я думаю, проблема в вашем контроллере: у вас есть запрос whereIn, которому нужно передать массив по второму аргументу. но ваш идентификатор равен нулю, поэтому он дает такую ​​ошибку. попробуйте изменить код на ниже, будет работать.

public function genresFilter ()
    {
        $sortBy = Input::get('sortBy', 'id');
        $dir    = Input::get('direction', 'desc');

        $orderBy = [
                        'tracks'=>[   'order_by'=>$sortBy, 'direction'=>$dir ]
                    ];

        $id = Input::get('id');

        // check if id is not array, then give empty array
        if(!is_array($id)) $id = [];

        $category = Category::where('slug','music-genre')->first();

        $tag = Tag::with('tracks','elements')->where('category_id', $category->id)->whereIn('id', $id)->get();
        echo "<pre>";
        print_r($tag->toArray());
        die();

        $this->layout->content = View::make('public.tags.genres', compact('tag'));
    }

решение 2

public function genresFilter ()
    {
        $sortBy = Input::get('sortBy', 'id');
        $dir    = Input::get('direction', 'desc');

        $orderBy = [
                        'tracks'=>[   'order_by'=>$sortBy, 'direction'=>$dir ]
                    ];

        $id = Input::get('id');

        $category = Category::where('slug','music-genre')->first();

        $tag = Tag::with('tracks','elements')->where('category_id', $category->id);
        
        // if id is not null and and array then we do filter
        if($id != null && is_array($id)) {
           $tag->whereIn('id', $id);
        }

        $tag->get();

        echo "<pre>";
        print_r($tag->toArray());
        die();

        $this->layout->content = View::make('public.tags.genres', compact('tag'));
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...