如果在laravel雄辩中参数为空,有没有办法返回所有行?

时间:2014-08-21 16:02:15

标签: php laravel laravel-4

这是我根据参数过滤值的代码。我想把它移到一行。 laravel4有没有可用的选项?

    if($network) //when $network variable has a value.(i will have the same thing for orderby, customer, etc..)
    {
        return  $deals=$mobiles->deals()->where('network','=',$network)->get();// ->orderby($orderby);
    }
    else
    {
        return  $deals=$mobiles->deals()->get();

    }

4 个答案:

答案 0 :(得分:2)

使用三元组:

return $network ? $mobiles->deals()->where('network','=',$network)->get() : $mobiles->deals()->get();

答案 1 :(得分:2)

@ moonwave99(在我看来)建议的比三元更干净的方法是在模型中添加scope

public function scopeNetwork($query, $network = null) {
    if (null !== $network)
        $query->where('network', $network);

    return $query;
}

然后您可以使用

return $mobiles->deals()->network($network)->get();

答案 2 :(得分:0)

这是一种令人难以置信的圆形方式...我推荐@ moonwave99的解决方案,但你可以将一个闭包传递给where()。那个,与布尔值混合,whereNotNull()可以做到。从技术上讲,这是一行代码,但为了便于阅读,我将它拆开了。

简单方法:

return $network ? $mobiles->deals->where('network',$network)->get() : $mobiles->deals->get();

过于复杂的方式:

 return $mobiles->deals->where(isset($network) ? function($query) use ($network){ 
    $query->where('network', $network);
 } : function($query){ 
    $query->whereNotNull('id');
 })->get();

答案 3 :(得分:0)

我想知道为什么没有人建议使用LIKE代替=我确实喜欢这个,而且效果非常好。:)我可以使用很多动态过滤领域。 当您想要返回所有元素时,请确保将变量设置为null

我的代码变为

$sorttype=$orderby[0]=='-'?"desc":"asc"; //To get based on assenting or dissenting order
$orderby=$orderby[0]=='-'?substr($orderby, 1):$orderby; //just removing the first element if - existing, because that is just a flag. 

if(!$network){$network=null;} //set to null
if(!$orderby){$orderby='id';} //set to id when there no order by 


return  $deals=$mobiles->deals()
        ->where('network','LIKE',$network)
        ->orderby($orderby,$sorttype)
        ->get();