【问题标题】:How to store Carbon DateTime ISO object in Sub Json Document in Laravel 5.2 MongoDB如何在 Laravel 5.2 MongoDB 的 Sub Json 文档中存储 Carbon DateTime ISO 对象
【发布时间】:2016-07-22 06:40:44
【问题描述】:

我正在尝试将 Carbon 日期时间存储在 Sub Json 文档中,但不是以 ISO 格式存储,而是以如下所示的不同方式存储。

"_id" : ObjectId("5791bc3d6e79d211aa5be019"),
"breakUps" : [ 
   {
        "amount" : 2000,
        "expiry" : {
            "date" : "2016-09-05 06:25:01.000000",
            "timezone_type" : 3,
            "timezone" : "UTC"
        }
    }
],
"updated_at" : ISODate("2016-07-22T06:25:01.576Z"),
"created_at" : ISODate("2016-07-22T06:25:01.576Z")

相反,它应该像 ISODate("2016-07-22T06:25:01.576Z") 格式存储。

我的 Eloquent Model 课程是:

class Configurations extends Eloquent
{
    public $incrementing = false;
    public  $timestamps = true;
    protected $collection = 'configurations';
    protected $dates = array('created_at','updated_at','breakUps.expiry');
}

我用于保存对象的 PHP 代码

$config1 = new Configurations();
$config1->breakUps = [['amount' => 1000, 'expiry' => Carbon::now()->addDays(30)]];
$config1->save();

【问题讨论】:

标签: php mongodb datetime laravel-5


【解决方案1】:

Laravel 中的日期修改器不支持点表示法,因此,

protected $dates = ['breakUps.expiry'];

只是行不通。解决此问题的一种简单方法是将密钥作为breakUps_expiry 移动到文档的根目录。

protected $dates = ['breakUps_expiry'];

laravel-mongodb github页面已经有issue记录了,可以track it here.

【讨论】:

    【解决方案2】:

    对我有用的工作是使用原始 Mongo Date 对象 new \MongoDate(),并在返回它时使用 Carbon 方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 2016-11-12
      • 1970-01-01
      相关资源
      最近更新 更多