Laravel LightHouse GraphQL突变中的日期时间输入始终为空



我正在学习Laravel和LightHouse,我正在尝试创建一个使用DateTime并将其放入数据库的突变。每次我通过DateTime进行突变时,输入都不会显示,只是被标记为null,从而在数据库中引发错误,因为表不允许DateTime为null。我所有的其他价值观都很好,所以我很困惑。GraphQL Playground抛出的错误为SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "date_of_birth" violates not-null constraintnDETAIL: Failing row contains (17, Blaze, blaze@test.com, null, ABadPassword, null, 2020-08-26 19:54:38, 2020-08-26 19:54:38, null). (SQL: insert into "users" ("username", "password", "email", "updated_at", "created_at") values (Blaze, ABadPassword, blaze@test.com, 2020-08-26 19:54:38, 2020-08-26 19:54:38) returning "id")"

GraphQL Playground:中尝试的这种突变

mutation {
createUser(
username: "Blaze"
email: "blaze@test.com"
password: "ABadPassword"
date_of_birth: "1998-01-16 00:00:00"
){
id
}
}

这是我的模式:

"A date string with format `Y-m-d`, e.g. `2011-05-23`."
scalar Date @scalar(class: "Nuwave\Lighthouse\Schema\Types\Scalars\Date")
"A datetime string with format `Y-m-d H:i:s`, e.g. `2018-05-23 13:43:32`."
scalar DateTime @scalar(class: "Nuwave\Lighthouse\Schema\Types\Scalars\DateTime")
type Mutation {
createUser(
username: String @rules(apply: ["required", "unique:users,username"]),
password: String @rules(apply: ["required"]),
email: String @rules(apply: ["required", "unique:users,email"]),
date_of_birth: DateTime @rules(apply: ["required"])
): User! @create
}
type User {
id: ID!
username: String!
email: String!
email_verified_at: DateTime
password: String!
created_at: DateTime!
updated_at: DateTime!
date_of_birth: DateTime!
}

这是应用程序中User.php文件中的我的用户:

<?php
namespace App;
use IlluminateContractsAuthMustVerifyEmail;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'username', 'email', 'password',
'date_of_birth' => 'datetime'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}

这是我在数据库中的表,它是由迁移创建的:

DatabaseName=# SELECT * FROM users;
id | username | email | email_verified_at | password | remember_token | created_at | updated_at| 
date_of_birth  

希望这能为bug提供足够的上下文,并提前感谢您的帮助。

我认为您的问题在于如何声明模型的$fillable。您添加一个条目索引'date_of_birth'和值'datetime',这将使laravel认为可填充的值是datetime

把它改成这个

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'username', 'email', 'password', 'date_of_birth',
];

最新更新