是否有任何方法返回所有行,当参数是空的laravel雄辩


Is there any way to return all rows when parameter is empty in laravel eloquent?

这是我基于参数筛选值的代码。我想把它移到一条直线上。在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();
    }

使用三进制:

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

@moonwave99建议的比三元制更干净的方法(在我看来)是在你的模型中添加一个作用域。

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

你可以使用

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

这是一种令人难以置信的迂回方式…我推荐@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();

我想知道为什么没有人建议使用LIKE而不是= .我这样做了,工作得很好:)我可以有很多字段的动态过滤。当您想返回所有元素时,请确保where中的变量设置为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();