代码之家  ›  专栏  ›  技术社区  ›  senty

在不使用查询的情况下启动查询生成器

  •  2
  • senty  · 技术社区  · 6 年前

    所以,我可以用 User::where('username', '!=', null)->get() ;

    但是,在这种情况下,我希望使用从第一个条件开始的if条件来链接查询,并且 where('username', '!=', null) 在这种情况下是不必要的。让我举一个伪例子:

    我正在运行一个基于用户的报告,其中有几个字段。我希望像这样初始化查询生成器,并使用if语句链接查询。

    $user = User::class();   // I know I can't use this line, however you'll get the idea.
    
    if (isset($gender)) {
       $user = $user->where('gender', $gender);
    }
    
    if (isset($age)) {
       $user = $user->where('age', $age);
    }
    
    $users = $user->get()
    

    是启动查询(在第一行)的唯一方法:

    $user = User::where('username', '!=', null)
    
    2 回复  |  直到 6 年前
        1
  •  4
  •   Zakaria Acharki    6 年前

    您可以将对象实例化为:

    $user = (new User);
    

    注: 但是最好用 when() 而不是if语句。

    $users = User::when($gender, function ($query, $gender) {
        $query->where('gender', $gender);
    })
    ->when($age, function ($query, $age) {
        $query->where('age', $age);
    })
    ->get();
    

    如果变量未初始化,则可以使用 isset() 方法如下:

    $users = User::when( isset($gender), function ($query, $gender) {
        $query->where('gender', $gender);
    })
    ->when( isset($age), function ($query, $age) {
        $query->where('age', $age);
    })
    ->get();
    
        2
  •  5
  •   Tim Lewis    6 年前

    你在找

    $userQuery = User::query();
    

    然后,附加一些附加条款:

    $userQuery->where(...);
    

    然后,提供 closure ( ->first() , ->get() 等)要获得用户:

    $users = $userQuery->get();