php - array_merge():参数 #2 不是 sidefilter 上的数组
问题描述
我在一个问题上遇到了麻烦。在侧边栏过滤器功能中,当我单击复选框时,它将正确显示列表。但是当我取消选中复选框时,它将显示“array_merge():参数 #2 不是数组”,在检查元素时显示此错误。当我单击复选框时,它将生成此网址“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'));
}
//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::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>
解决方案
我认为您的控制器存在问题:您有 whereIn 查询需要在第二个参数上传递数组。但是您的 id 为空,这就是为什么它会给出这样的错误。尝试将代码更改为以下将起作用。
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'));
}
推荐阅读
- reactjs - 如何正确使用 React `useCallback` 的依赖列表?
- java - recyclerview和layout的我的ViewPager Fragment数据从一个fragment回来后消失了
- android - 创建静默通知
- xcode - 如何在 Xcode 中获得旧版本 iOS 的模拟器?
- reactjs - 使用 react 添加 Google 地图时出错 - TypeError:无法读取未定义的属性“地图”
- shell - 没有操作员的测试?
- ios - iOS Vision:VNRecognizedText boundingBox(for:) 方法为任何范围返回相同的边界框
- powershell - PowerShell 脚本 SCP 命令
- visual-studio-2010 - 如何在 Xamarin iOS 模拟器中正确拍摄屏幕截图
- ios - 当 FSCalendar 的范围从一个月到一周变化时,如何动态更改单元格大小?