如何使用Eloquent支持多个数据库进行日期操作?

时间:2013-10-09 16:35:19

标签: doctrine-orm laravel-4 eloquent

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

我想知道如何安全使用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等等。

1 个答案:

答案 0 :(得分:1)

Laravel使用Carbon来处理Date对象。

您应该以Y-m-d格式传递日期字符串,或使用DateTime / Carbon对象。

来自文档:

  

当列被视为日期时,您可以将其值设置为UNIX   timetamp,日期字符串(Y-m-d),日期时间字符串,当然还有a   DateTime / Carbon实例。   默认情况下,Eloquent将转换created_at,updated_at和   deleted_at列到Carbon的实例,它提供了一个   各种有用的方法,并扩展本机PHP DateTime   类。

请参阅:http://laravel.com/docs/eloquent#date-mutators