Php 在Laravel中,在一个查询中指定where()和find()是否是错误的做法?

Php 在Laravel中,在一个查询中指定where()和find()是否是错误的做法?,php,laravel,Php,Laravel,在控制器中,显示简单用户 User::where('is_admin', false)->find($id); 在控制器中,显示管理员 User::where('is_admin', true)->find($id); 当然,为了增加更多的魔力,我们可以这样做 public function scopeAdmins($query) { return $query->where('is_admin', true); } 和使用 User::admins()->

在控制器中,显示简单用户

User::where('is_admin', false)->find($id);
在控制器中,显示管理员

User::where('is_admin', true)->find($id);
当然,为了增加更多的魔力,我们可以这样做

public function scopeAdmins($query)
{
    return $query->where('is_admin', true);
}
和使用

User::admins()->find($id);

但它只是语法上的糖分

我看不出你如何拥有它有任何问题。scope或raw where子句都适用。范围主要是语法上的糖类。作用域的好处是将所有管理约束放在一个位置,因此如果您更改用户标记为管理的方式,您只需在一个位置更改它

您可能会使范围更通用一些,如下所示:

public function scopeAdmins($query, $isAdmin = true)
{
    return $query->where('is_admin', $isAdmin);
}
然后让管理员像

User::admins()->find($id); // or more explicitly User::admins(true)->find($id);
User::admins(false)->find($id);
然后得到像这样的非管理员

User::admins()->find($id); // or more explicitly User::admins(true)->find($id);
User::admins(false)->find($id);

没有理由避免这种情况。它比User::where('is_admin',false)->where('id',$id)->first()更清楚,这是这里唯一有意义的选择。