【问题标题】:pdo_sqlsrv and date format with LaravelLaravel 的 pdo_sqlsrv 和日期格式
【发布时间】:2014-01-05 13:25:06
【问题描述】:

我想尝试一下Laravel,所以我花了一个下午的时间来设置它。

在 Windows 上,我安装了:WAMP 32 位和 PHP 5.4、SQL Server Microsoft 的 3.0 驱动程序(这就是我使用 WAMP 32 位的原因)和 Composer。

然后我创建了一个项目,下载 Laravel 和生成器。我创建了一个脚手架来查看它生成的代码类型并对其进行测试。

由于 nvarchar 到日期时间的转换错误,我的第一个“创建”操作失败。我将查询粘贴到 SQL Server Management Studio (SSMS) 并以相同的结果触发它。

错误来自日期格式。 Laravel 是这样说的:“2013-12-17 16:55:124”。但在请求之前,它会向 SQL Server 发送一些集合,其中一个非常有趣:

set dateformat dmy

对我来说set dateformat dmy 意味着它期待这样的日期: “17-12-2013 16:55:124”

在 SSMS 中将设置的日期格式更改为:

set dateformat ymd

或更改请求中的日期格式使其生效。

我不认为这是一个错误。我只是觉得有些地方配置错误。我只是不知道是什么。

【问题讨论】:

    标签: php sql-server pdo laravel laravel-4


    【解决方案1】:

    我使用 DB::raw 和 SQL 的服务器特定语法来修复它。

    public function datetime() {
    
        $addDate = DB::insert("insert into TABLE (date) values (convert(date,'$date',127))");
    
    }
    

    我不知道它发生的确切原因,但是使用经典 Laravel DB 语法的相同函数返回 SQLSTATE[22007]。

    public function datetime() {
    
        $addDate = DB::table('TABLE')
        ->insert([
            'date'=> $date]);
    
       // return SQLSTATE[22007]
    }
    

    【讨论】:

      【解决方案2】:

      我终于找到了一个看起来很干净的方法。诀窍是强制 Laravel 在 SQL Server 中使用 datetime2 而不是 datetime

      为此,您需要进行以下更改:

      在 Illuminate/Database/Schema/Grammars/SqlServerGrammar.php 中

      protected function typeDateTime(Fluent $column)
      {
          return 'datetime'; // Change to datetime2
      }
      

      protected function typeTimestamp(Fluent $column)
      {
          return 'datetime'; // Change to datetime2
      }
      

      然后在 Illuminate/Database/Query/Grammars/SqlServerGrammar.php:

      public function getDateFormat()
      {
          return 'Y-m-d H:i:s.000'; // change to 'Y-m-d H:i:s.0000000'
      }
      

      我希望它可以帮助某人......

      【讨论】:

      • 你好,我同意你的观点,但我的回答是 4 岁,问题出在 Laravel 4 上。另外,我在 laravel 上做了 PR,所以很久以前就修复了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2017-09-06
      • 1970-01-01
      • 2018-03-16
      • 2021-05-14
      • 2017-08-29
      • 1970-01-01
      相关资源
      最近更新 更多