分别Eloquent ORM与DB门面查询某月、季度、年的数据
一、使用Eloquent ORM法:
在 Laravel 中,您可以使用 Eloquent ORM 来查询数据库表中的数据。假设您要从 Contract
表中查询某个月、某个季度或某年的数据记录,您可以使用 Eloquent 的 where
方法结合 Carbon 库来处理日期。
以下是一些示例代码,展示如何查询特定时间段的数据记录。
1. 查询某个月的数据记录
假设您想查询 2023 年 3 月的数据记录:
use App\Models\Contract;
use Carbon\Carbon;
$month = 3; // 3 月
$year = 2023; // 2023 年
$contractsForMonth = Contract::whereYear('create_time', $year)
->whereMonth('create_time', $month)
->get();
2. 查询某个季度的数据记录
假设您想查询 2023 年第一季度(1 月至 3 月)的数据记录:
use App\Models\Contract;
use Carbon\Carbon;
$quarter = 1; // 第一季度
$year = 2023; // 2023 年
$startMonth = ($quarter - 1) * 3 + 1; // 计算开始月份
$endMonth = $startMonth + 2; // 计算结束月份(包括3个月)
$contractsForQuarter = Contract::whereYear('create_time', $year)
->whereBetween('create_time', [
Carbon::createFromDate($year, $startMonth, 1)->startOfMonth(),
Carbon::createFromDate($year, $endMonth, 1)->endOfMonth()
])
->get();
3. 查询某年的数据记录
假设您想查询 2023 年的数据记录:
use App\Models\Contract;
$year = 2023; // 2023 年
$contractsForYear = Contract::whereYear('create_time', $year)
->get();
代码解释
whereYear
:用于查询指定年份的数据记录。whereMonth
:用于查询指定月份的数据记录。whereBetween
:用于查询在两个日期之间的数据记录。这里我们使用 Carbon 库来创建开始和结束日期。get()
:执行查询并获取结果。
使用 Carbon
Carbon 是 Laravel 默认集成的日期处理库,您可以轻松地进行日期计算和格式化。在上述示例中,我们使用 Carbon::createFromDate
方法来创建日期,并使用 startOfMonth
和 endOfMonth
方法来获取月份的开始和结束日期。
总结
通过以上示例,您可以根据需要查询 Contract
表中某个月、某个季度或某年的数据记录。根据您的具体需求,可以进一步调整查询条件。
二、使用Laravel DB门面法:
如果您想在 Laravel 中使用原始的 MySQL 查询语句而不是 Eloquent ORM,可以使用 DB
门面来执行 SQL 查询。以下是如何使用原始 SQL 查询来获取某个月、某个季度和某年的数据记录的示例。
1. 查询某个月的数据记录
假设您想查询 2023 年 3 月的数据记录:
use Illuminate\Support\Facades\DB;
$month = 3; // 3 月
$year = 2023; // 2023 年
$contractsForMonth = DB::select("
SELECT * FROM contracts
WHERE YEAR(create_time) = ? AND MONTH(create_time) = ?", [$year, $month]);
2. 查询某个季度的数据记录
假设您想查询 2023 年第一季度(1 月至 3 月)的数据记录:
use Illuminate\Support\Facades\DB;
$quarter = 1; // 第一季度
$year = 2023; // 2023 年
$startMonth = ($quarter - 1) * 3 + 1; // 计算开始月份
$endMonth = $startMonth + 2; // 计算结束月份(包括3个月)
$contractsForQuarter = DB::select("
SELECT * FROM contracts
WHERE create_time BETWEEN ? AND ?", [
"{$year}-{$startMonth}-01",
"{$year}-{$endMonth}-31"
]);
3. 查询某年的数据记录
假设您想查询 2023 年的数据记录:
use Illuminate\Support\Facades\DB;
$year = 2023; // 2023 年
$contractsForYear = DB::select("
SELECT * FROM contracts
WHERE YEAR(create_time) = ?", [$year]);
代码解释
DB::select
:用于执行原始 SQL 查询并返回结果。?
占位符:用于绑定参数,防止 SQL 注入攻击。[$year, $month]
:这是一个数组,包含了要绑定到 SQL 查询中的参数。
注意事项
- 确保您的数据库表名(如
contracts
)与实际数据库中的表名一致。 - 如果您的
create_time
字段使用了不同的名称或类型,请相应调整 SQL 查询。 - 使用原始 SQL 查询时,请注意 SQL 注入风险,确保使用参数绑定。
总结
通过以上示例,您可以使用原始 MySQL 查询语句在 Laravel 中查询特定时间段的数据记录,而不依赖于 Eloquent ORM。这在某些情况下可能会更灵活,特别是当您需要执行复杂的查询时。
评论已关闭