【问题标题】:Laravel: Query on the same table multiple timesLaravel:多次查询同一张表
【发布时间】:2018-11-25 14:01:34
【问题描述】:

我有一张用户表

+-------+------+-----+
| 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();

它会查询 3 次吗?是否可以查询一次,然后多次解析?

【问题讨论】:

    标签: laravel laravel-5 eloquent laravel-collection


    【解决方案1】:

    是的,我不确定这里的 UserTable 是 Builder 还是 Eloquent,但 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();
    

    现在,假设 user1 设置了性别,您实际上可以使用:

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

    另外,假设只有一个user1而不是:

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

    可能更好的解决方案是:

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

    【讨论】:

      猜你喜欢
      • 2016-09-25
      • 2019-02-21
      • 2020-09-08
      • 2017-04-04
      • 1970-01-01
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      相关资源
      最近更新 更多