如何在 Laravel 的流畅查询构建器中选择计数?


Laravel 中的流畅查询构建器是一个接口,负责创建和运行数据库查询。查询构建器可以很好地与 Laravel 支持的所有数据库一起使用,并且可以用于在其上执行几乎所有数据库操作。

使用流畅查询构建器的优势在于它具有防止 SQL 注入攻击的保护机制。它使用 PDO 参数绑定,您可以自由发送所需的字符串。

流畅查询构建器支持许多方法,例如count、min、max、avg、sum,这些方法可以从您的表中获取聚合值。

现在让我们看一下如何使用流畅查询构建器在 select 查询中获取计数。要使用流畅查询构建器,请使用如下所示的 DB facade 类

use Illuminate\Support\Facades\DB;

现在让我们检查一些示例以在 select 查询中获取计数。假设我们已经创建了一个名为 students 的表,使用以下查询

CREATE TABLE students( 
   id           INTEGER       NOT NULL    PRIMARY KEY, 
   name         VARCHAR(15)   NOT NULL, 
   email        VARCHAR(20)   NOT NULL, 
   created_at   VARCHAR(27), 
   updated_at   VARCHAR(27), 
   address      VARCHAR(30)   NOT NULL 
);

并按如下所示填充它:

+----+---------------+------------------+-----------------------------+-----------------------------+---------+ 
| id | name          | email            | created_at                  | updated_at                  | address | 
+----+---------------+------------------+-----------------------------+-----------------------------+---------+ 
| 1  | Siya Khan     | [email protected]   | 2022-05-01T13:45:55.000000Z | 2022-05-01T13:45:55.000000Z |     Xyz | 
| 2  | Rehan Khan    | [email protected]  | 2022-05-01T13:49:50.000000Z | 2022-05-01T13:49:50.000000Z |     Xyz | 
| 3  | Rehan Khan    | [email protected]  |         NULL                |         NULL                | testing | 
| 4  | Rehan         | [email protected]  |         NULL                |         NULL                | abcd    | 
+----+---------------+------------------+-----------------------------+-----------------------------+---------+

表中的记录数为 4。

示例 1

在下面的示例中,我们在 DB::table 中使用 students。count() 方法负责返回表中存在的总记录数。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class StudentController extends Controller{ public function index() { $count = DB::table('students')->count(); echo "The count of students table is :".$count; } }

输出

上述示例的输出为:

The count of students table is :4

示例 2

在这个例子中,我们将使用selectRaw()来获取表中存在的总记录数。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class StudentController extends Controller { public function index() { $count = DB::table('students')->selectRaw('count(id) as cnt')->pluck('cnt'); echo "The count of students table is :".$count; } }

列 id 用于selectRaw()方法中的count()中,并使用 pluck 获取计数。

输出

上述代码的输出为:

The count of students table is :[4]

示例 3

此示例将使用selectRaw()方法。假设您想计算名称,例如Rehan Khan。让我们看看如何将 selectRaw() 与count()方法一起使用

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class StudentController extends Controller { public function index() { $count = DB::table('students')-> where('name', 'Rehan Khan')-> selectRaw('count(id) as cnt')->pluck('cnt'); echo "The count of name:Rehan Khan in students table is :".$count; } }

在上面的示例中,我们想要查找表:students中名称为Rehan Khan的计数。因此,编写的查询为。

DB::table('students')->where('name', 'Rehan Khan')->selectRaw('count(id) as cnt')->pluck('cnt');

我们使用了 selectRaw() 方法,该方法负责计算来自 where 过滤器的记录。最后,pluck() 方法用于获取计数值。

输出

上述代码的输出为:

The count of name:Rehan Khan in students table is :[2]

示例 4

如果您计划使用count()方法来检查表中是否存在任何记录,则可以使用 exists() 或doesntExist()方法作为替代,如下所示:

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class StudentController extends Controller{ public function index() { if (DB::table('students')->where('name', 'Rehan Khan')->exists()) { echo "Record with name Rehan Khan Exists in the table :students"; } } }

输出

上述代码的输出为:

Record with name Rehan Khan Exists in the table :students

示例 5

使用doesntExist()方法检查给定表中是否存在任何记录。

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class StudentController extends Controller{ public function index() { if (DB::table('students')->where('name', 'Neha Khan')->doesntExist()) { echo "Record with name Rehan Khan Does not Exists in the table :students"; } else { echo "Record with name Rehan Khan Exists in the table :students"; } } }

输出

上述代码的输出为:

Record with name Rehan Khan Does not Exists in the table :students

更新于:2022年8月30日

浏览量 18K+

启动您的职业生涯

通过完成课程获得认证

开始学习
广告