Я использую Lighthouse PHP в своем приложении laravel 5.7. Я пытаюсь определить геометрическое поле (многоугольник) в своей схеме, но это не сработало.
Может ли кто-нибудь помочь мне, как определить поле многоугольника в моей схеме graphql. схема и код запроса
да ладно сделано @digijay
Где ваше определение типа для многоугольника? Какие ошибки вы получаете? Думаю, стоит посмотреть Скаляры.






Судя по вашему образу, вы не создали типа для Polygon.
Поскольку вы на самом деле не указали, как вы хотите проиллюстрировать многоугольник, я просто покажу пример. В этом примере я собираюсь создать новый тип GraphQl Scalar.
Обычный способ указать многоугольник - использовать набор таких наборов координат, как
((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))
Чтобы представить это, я бы создал новый Скаляр
"A string representation of a polygon e.g. `((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))`."
scalar Polygon @scalar(class: "Your\\Classname\\Polygon")
Затем создайте класс, который должен анализировать / проверять строку
use GraphQL\Error\Error;
use GraphQL\Language\AST\Node;
use GraphQL\Language\AST\StringValueNode;
use GraphQL\Type\Definition\ScalarType;
class Polygon extends ScalarType
{
/**
* Serializes an internal value to include in a response.
*
* @param mixed $value
*
* @return mixed
*
* @throws Error
*/
public function serialize($value)
{
if ($value instanceof Geometry\Polygon) {
$value->toString();
}
return (new Geometry\Polygon($value))->toString();
}
/**
* Parses an externally provided value (query variable) to use as an input
*
* In the case of an invalid value this method must throw an Exception
*
* @param mixed $value
*
* @return mixed
*
* @throws Error
*/
public function parseValue($value)
{
return new Geometry\Polygon($value);
}
/**
* Parses an externally provided literal value (hardcoded in GraphQL query) to use as an input
*
* In the case of an invalid node or value this method must throw an Exception
*
* @param Node $valueNode
* @param mixed[]|null $variables
*
* @return mixed
*
* @throws Exception
*/
public function parseLiteral($valueNode, ?array $variables = null)
{
if (! $valueNode instanceof StringValueNode) {
throw new Error(
"Query error: Can only parse strings, got {$valueNode->kind}",
[$valueNode]
);
}
return new Geometry\Polygon($valueNode->value);
}
}
Я не реализовал логику для класса Geometry\Polygon, и вся проверка для этого типа ввода и скалярного типа также может потребовать некоторой настройки. Но в основном именно так вы создадите тип Polygon Scalar в Ligthouse.
Имея это, вы можете затем в поле areazone ввести строку с форматом, указанным выше, и в своем коде вы получите ее как класс Geometry\Polygon.
Вы можете узнать больше о скалярах в Документы Lighthouse.
Не могли бы вы добавить код, который у вас есть, к вашему вопросу?