Итак, я сузил основы с помощью GraphQL. В моем приложении Laravel
Мой graphql возвращает ID, tenant_reference и роли, но я не могу добавить в настраиваемые атрибуты свой объект с настраиваемыми ключами, он просто возвращает ноль или, если я пытаюсь добавить ключ, он выдает ошибки.
Вот пример представления данных в формате JSON:
"data": {
"vendor_id": "b8faaf26-c8a6-3560-8357-f789f3325b0c",
"roles": [
"manager"],
"tenant_reference": "lightcoral70",
"custom_attributes": {
"fred": "test",
"one": "test2"}
}
Вот фрагмент кода:
public function fields() {
return [
'id' => [
'type' => GraphQlType::nonNull(GraphQlType::string()),
'description' => 'The id of the user',
'alias' => 'user_id', // Use 'alias', if the database column is different from the type name
],
'tenant_reference' => [
'type' => GraphQlType::nonNull(GraphQlType::string()),
'description' => 'Tenant reference this user belongs to',
'alias' => 'tenant'
],
'roles' => [
'type' => GraphQlType::listOf(GraphQlType::string()),
'description' => 'User roles'
],
'custom_attributes' => [
'type' => GraphQlType::listOf(GraphQlType::string()),
]
];
}
Вот фрагмент запроса:
protected $repository;
protected $attributes = [
'name' => 'Users query'
];
public function __construct(UserRepository $repository) {
$this->repository = $repository;
}
/**
* @return \GraphQL\Type\Definition\ListOfType|null
*/
public function type() {
return GraphQlType::listOf(GraphQL::type('user_record'));
}
/**
* Arguments we can use to filter the query
* @return array
*/
public function args() {
return [
'sub' => [
'name' => 'id',
'type' => GraphQlType::string()
],
'tenantReference' => [
'name' => 'tenantReference',
'type' => GraphQlType::string()
],
];
}
/**
*/
public function resolve($root, $args) {
return User::where([
"tenant_reference" => $args['tenantReference'],
"sub" => $args['id']
])->get();
}
Это то, чего я хочу достичь с помощью эмулятора graphiql:
Имейте в виду, что пользовательские атрибуты могут быть чем угодно. Например. я мог бы добавить еще один ключ динамически твиттер: urlhere
{
user_record(
id:"b8faaf26-c8a6-3560-8357-f789f3325b0c",
tenantReference:"lightcoral70")
{
id,
tenant_reference,
roles,
custom_attributes
fred
}
}
Это то, что он делает, используя graphiql
используйте этот запрос на graphql
{
user_record(
id:"b8faaf26-c8a6-3560-8357-f789f3325b0c",
tenantReference:"lightcoral70")
{
id,
tenant_reference,
roles,
custom_attributes{
fred
}
}
}
Других решений пока нет …