尝试根据多个值的任意组合过滤掉集合对象。这是我所拥有的。没有发生。有什么线索吗?
public function search()
{
$posts = Posting::all();
$type_id = Input::get('type_id');
$country_id = Input::get('country_id');
$province_id = Input::get('province_id');
$posts = $posts->filter(function($post)
{
if( !empty($type_id) && $type_id>0 )
{
return $post->where('type_id','=',$type_id);
}
})->values();
$posts = $posts->filter(function($post)
{
if( !empty($country_id) && $country_id>0 )
{
return $post->where('country_id','=',$country_id);
}
})->values();
$posts = $posts->filter(function($post)
{
if( !empty($province_id) && $province_id>0 )
{
return $post->where('province_id','=',$province_id);
}
})->values();
return $posts;
}
任何帮助表示感谢。
答案 0 :(得分:0)
首先,如果提供了大于0的id
,您应该对其进行验证。你不应该手动检查出来。
但无论如何,你为什么要使用过滤器,当你可以直接使用Eloquent时(我省略了检查id大于0):
$type_id = Input::get('type_id');
$country_id = Input::get('country_id');
$province_id = Input::get('province_id');
$query = Posting::query();
if ( ! empty($type_id)) $query->whereTypeId($type_id);
if ( ! empty($country_id)) $query->whereCountryId($country_id);
if ( ! empty($province_id)) $query->whereProvinceId($province_id);
return $query->get();
答案 1 :(得分:0)
首先,您需要从filter
:
$posts = $posts->filter(function($post)
{
if( !empty($type_id) && $type_id>0 )
{
return $post->where('type_id','=',$type_id);
}
})
上面返回Eloquent\Builder
对象,它被评估为true
,所以..它真的没有意义。
这就是您所需要的:
$posts = $posts->filter(function($post)
{
if( !empty($type_id) && $type_id>0 )
{
return $post->type_id == $type_id; // bool
}
})
使用此类代码,您将过滤集合。 $posts
现在只保留那些与该闭包中的语句匹配的项目。