1

我正在开发一个至少支持两个数据库的系统:MySQLSQLite

而且我想知道如何安全地使用 Eloquent 进行日期操作,例如日期差异、添加/子天数、添加/子月数等。

目前我有以下代码,它有效,但我仍然希望找到更好的方法。

$database = Config::get('database.default');
$yesterdaySql;

if ($database == 'sqlite') 
{
    $yesterdaySql = 'datetime(\'now\', \'-1 day\')';
}
else if ($databse == 'mysql') 
{
    $yesterdaySql = 'subdate(current_date, 1)';
}

是否有另一种方法可以在不显式使用原始和专有 SQL 语句的情况下做到这一点?我很想看到类似的东西:

$yesterdaySql = Model::where('date', DB::addDays(-1));
// DB will generate the proper raw SQL.

做了一些研究,我发现 Doctrine 有一个Doctrine\DBAL\Platform\AbstractPlatform包含方法的类,例如:getDateDiffExpressiongetDateAddDaysExpression等等。

4

1 回答 1

1

Laravel 使用 Carbon 来处理 Date 对象。

您应该以 Ymd 格式传递日期字符串或使用 DateTime/Carbon 对象。

从文档:

当一列被视为日期时,您可以将其值设置为 UNIX 时间戳、日期字符串 (Ymd)、日期时间字符串,当然还有 DateTime / Carbon 实例。默认情况下,Eloquent 会将 created_at、updated_at 和 deleted_at 列转换为 Carbon 的实例,它提供了各种有用的方法,并扩展了原生的 PHP DateTime 类。

看到这个: http: //laravel.com/docs/eloquent#date-mutators

于 2013-10-09T17:49:43.300 回答