1 回答
TA贡献1784条经验 获得超9个赞
这在 Laravel 6 中很容易通过创建一个新的 Illuminate Grammar 类并覆盖该getDateFormat方法来完成,如果模型上缺少该属性,该方法将用作后备。dateFormat
看看里面vendor/laravel/framework/src/Illuminate/Database/Query/Grammars。您的课程将需要根据您连接的数据库扩展此处找到的特定于供应商的语法课程之一。对于这个例子,我将扩展PostgresGrammar. app/Providers/AppServiceProvider.php像这样调整:
use Illuminate\Support\Facades\DB;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
* @throws \Doctrine\DBAL\DBALException
*/
public function register()
{
// ...
$conn = DB::connection(DB::getDefaultConnection());
$platform = $conn->getDoctrineConnection()->getDatabasePlatform();
$conn->setQueryGrammar(new class($platform->getDateTimeTzFormatString()) extends PostgresGrammar {
protected $date_format;
public function __construct(string $date_format)
{
$this->date_format = $date_format;
}
public function getDateFormat()
{
return $this->date_format;
}
});
}
}
这将用另一个让我们接管日期格式字符串的查询语法替换原始查询语法。匿名类用于避免为这一小部分功能创建单独的文件,但您可以选择将其移至其自己的文件以提高可读性。匿名类的值$platform->getDateTimeTzFormatString()作为构造函数的唯一参数传递,然后存储以供getDateFormat方法使用。
在此更改之后,任何尾随数据错误都应该永远消失。只需确保在以后的每次迁移中都使用timestampTz和timestampsTz。第三方库通常允许您发布与其捆绑的任何迁移,允许您根据需要进行调整。
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报