我正在开发一个支持至少两个数据库的系统: 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
类,其中包含以下方法:getDateDiffExpression
,getDateAddDaysExpression
等等。
答案 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 类。