如何在laravel 5中链接查询

时间:2015-10-05 18:04:55

标签: laravel activerecord

我曾经在代码Igniter

中做过类似的事情
 $this->db->select('*');
 $this->db->from($this::DB_TABLE);
 if ($role == "manager") {
    $this->db->where('is_manager',1);
 }
 if ($role == "staff") {
     $this->db->where('is_staff',1);
 }
 $this->db->where('is_active', 1);
 $this->db->order_by('last_name', 'asc');
 $user_set = $this->db->get();
 return $user_set;

如何在laravel 5中编写类似的查询。我是laravel的新手。

2 个答案:

答案 0 :(得分:3)

是的,但是我们拥有Codeigniter中不存在的非常棒的Eloquent ORM。

现在看起来像:

Model::where('is_manager', 1)->where('is_active', 1)->orderBy('last_name', 'DESC')->get()

它类似,但更强大。

研究Eloquent docs并查看Laracasts教程中的一些基本示例。

答案 1 :(得分:2)

如果要有条件地更改查询参数,请执行以下操作:

$query = Model::select('*')
if ($role == "manager") {
    $query = $query->where('is_manager',1);
}
if ($role == "staff") {
    $query = $query->where('is_staff',1);
}
$user_set = $query->where('is_active', 1)->orderBy('last_name', 'asc')->get();

return $user_set;

但我认为这样会更简洁(完全未经测试,但我认为这样可行):

return  Model::select('*')
    ->where('is_manager', $role == 'manager' ? 1 : 0)
    ->where('is_staff', $role == 'staff' ? 1 : 0)
    ->where('is_active', 1)
    ->orderBy('last_name', 'ASC')
    ->get();