creamos la mutation
php artisan make:graphql:mutation CreateCityMutation
editamos el archivo que CreateCityMutation.php que se genera:
public function type()
{
return GraphQL::type('city');
}
public function args()
{
return [
'name' => [
'name' => 'name',
'type' => Type::nonNull(Type::string()),
'rules' => ['required', 'min:3', 'max:50','unique:cities,name']
],
];
}
public function resolve($root, $args)
{
$city = new City();
$city->fill($args);
$city->save();
return $city;
}
en este caso el -unico parametro y obligatorio que le enviamos a la funcion es el name de la city
por que en el modelo este campo debe estar como parte de la lista de campos que se pueden asignar de modo masivo:
en City.php
protected $fillable = [
'name'
];
notar que por simplicidad pusimos las validaciones dentro de la funcion de args, esto tambien se
puede hacer en una funcion separada, en nuestro caso hubiese quedado asi:
public function rules(array $args = [])
{
return [
'name' => [
'required', 'min:3', 'max:50','unique:cities,name'
],
];
}
ahora registramos la mutation en grapql.php dentro de la seccion de Schemas:
'schemas' => [
'default' => [
'query' => [
..
],
'mutation' => [
'createCity' => App\GraphQL\Mutation\CreateCityMutation::class,
],
],
],
ahora ya podemos probar la query de creacion
mutation createCity {
createCity(name : "barcelona"){
id,name
}
}
en donde id, name serian los campos que queremos que nos muestre el resultado de la operacion (es necesario indicarlos)
lo que nos resultaria en algo como:
{
"data": {
"createCity": {
"id": 6,
"name": "barcelona"
}
}
}
para actualizar seria :
en UpdateCityMutation.php
public function rules(array $args = [])
{
return [
'id' => [
'required', 'numeric', 'min:1', 'exists:cities,id'
]
];
}
public function args()
{
return [
'id' => [
'name' => 'id',
'type' => Type::nonNull(Type::int()),
],
'name' => [
'name' => 'name',
'type' => Type::nonNull(Type::string()),
'rules' => ['required', 'min:3', 'max:50','unique:cities,name']
],
];
}
public function resolve($root, $args)
{
$city = City::findOrFail($args['id']);
$city->fill($args);
$city->save();
return $city;
}
y al igual que con el create, la llamada seria de esta manera:
mutation updateCity {
updateCity(id:6,name: "ciudad de barcelona"){
id,name
}
}
para eliminar un registro:
DeleteCityMutation.php
public function rules(array $args = [])
{
return [
'id' => [
'required', 'numeric', 'min:1', 'exists:cities,id'
]
];
}
public function type()
{
return Type::boolean();
}
public function args()
{
return [
'id' => [
'name' => 'id',
'type' => Type::int()
]
];
}
public function resolve($root, $args)
{
$city = City::findOrFail($args['id']);
$city->delete() ? true : false;
}
mutation deleteCity {
deleteCity(id:5)
}
resultando:
{
"data": {
"deleteCity": null
}
}
No hay comentarios:
Publicar un comentario