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

Laravel:对同一个表进行多次查询

  •  0
  • Led  · 技术社区  · 6 年前

    我有一张用户表

    +-------+------+-----+
    | User  | Sale | Sex |
    +-------+------+-----+
    | user1 |  120 | M   |
    | user2 |   98 | M   |
    | user3 |    5 | F   |
    +-------+------+-----+
    

    在Laravel中,我们通过以下语句进行查询:

    $allMale = UserTable::where('Sex', 'M')->get();
    

    在我试图再次查询同一个表时会发生什么

     $allFemales = UserTable::where('Sex', 'F')->get();
     $user1 = UserTable::where('User', 'user1')->get();
    

    它会查询三次吗?是否可以先查询一次,然后再分析多次?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Marcin Nabiałek    6 年前

    是的,我不确定这里的用户表是builder还是雄辩的,但是引擎盖下的eloquet使用的是mysql,所以它将运行3个不同的查询:

    SELECT * FROM users WHERE Sex = 'M';
    SELECT * FROM users WHERE Sex = 'F';
    SELECT * FROM users WHERE User = 'user1';
    

    当然,你可以这样做:

    $users = UserTable::where(function($q) {
      $q->whereIn('Sex', ['M', 'F'])->orWhere('User', 'user1')
    })->get();
    

    这将生成查询:

    SELECT * FROM users WHERE ((Sex IN ('M', 'F') OR USER = 'user1'))
    

    现在您可以使用以下方法从变量中获取这些用户 Laravel collection methods 以下内容:

    $allMale = $users->where('Sex', 'M')->get();
    $allFemales = $users->where('Sex', 'F')->get();
    $user1 = $users->where('User', 'user1')->get();
    

    现在,假设用户1具有性设置,您实际上可以使用:

    $users = UserTable::whereIn('Sex', ['M', 'F'])->get();
    

    此外,假设只有一个用户1,而不是:

    $user1 = $users->where('User', 'user1')->get();
    

    或许更好的解决方案是:

    $user1 = $users->where('User', 'user1')->first();