Laravel抱怨追踪数据'将JSON中的ISO格式的日期发送到服务器时?

时间:2018-03-19 00:35:55

标签: javascript laravel date iso8601

我的Laravel模型带有日期字段archivedAt。这已在模型的$dates数组中设置,如下所示:

联系模式

class Contact extends Model
{
    /**
     * The name of the table in the database.
     *
     * @laravel-table-name
     *
     * @var string
     */
    protected $table = 'Contacts';

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = [
        'createdAt',
        'updatedAt',
        'archivedAt'
    ];

}

当我尝试通过GraphQL向服务器发送JSON有效负载时,我得到以下回复:

{
    "data": {
        "editContact": null
    },
    "errors": [
        {
            "message": "Unexpected data found.\nTrailing data",
            "locations": [
                {
                    "line": 2,
                    "column": 3
                }
            ]
        }
    ]
}

当然,Laravel的GraphQL库非常糟糕,并且不包含完整的堆栈跟踪或任何其他信息,但这似乎是我设置archivedAt字段的问题。以下是我如何做到这一点:

{
    "operationName": null,
    "variables": {
        "contactEditForm": {
            "id": "2",
            "name": "Maybelle Collier",
            "email": "cletus49@example.org",
            "phone": "+1 (997) 381-8483",
            "archivedAt": "2018-03-19T00:07:57.191Z",
            "createdAt": "2018-03-18 23:57:30",
            "updatedAt": "2018-03-18 23:57:30"
        }
    },
    "query": "mutation ($contactEditForm: ContactEditForm!) {\n  editContact(contactEditForm: $contactEditForm) {\n    id\n    name\n    __typename\n  }\n}\n"
}

如您所见,archivedAt是一个ISO8601格式的字符串,它是在我的客户端上生成的:

(new Date())->toISOString();

然后应该将其保存在具有变异的GraphQL服务器上,如下所示:

public function resolve($root, $args, $context, ResolveInfo $info)
{
    $contact = Contact::find($args['contactEditForm']['id']);
    $contact->fill($args['contactEditForm']);
    $contact->save();

    return $contact;
}

为什么Laravel不喜欢这个?

1 个答案:

答案 0 :(得分:1)

我从来没有遇到过这个问题,但根据Laravel's Docs,如果你在$ dates属性中设置字段,则要正确变异:

  

当列被视为日期时,您可以将其值设置为UNIX   时间戳,日期字符串(Y-m-d),日期时间字符串,当然还有   DateTime / Carbon实例,日期的值将自动生效   正确存储在您的数据库中:

所以,显然,mutator不允许使用ISO字符串日期,因此要么将其设置为其中一种格式defining an acessorlike this),要么将其从$ date中删除并自行处理

http://carbon.nesbot.com/docs/#api-commonformats