Обработка ошибки «Laravel Lighthouse не может вернуть значение NULL для поля, не допускающего значения NULL»: методы и примеры кода

При работе с Laravel Lighthouse, популярным пакетом для добавления функциональности GraphQL в приложения Laravel, вы можете столкнуться с сообщением об ошибке «Laravel Lighthouse не может вернуть значение NULL для поля, не допускающего значения NULL». Эта ошибка возникает, когда поле, не допускающее значения NULL, в вашей схеме GraphQL возвращает значение NULL во время выполнения запроса. В этой статье мы рассмотрим различные методы устранения этой ошибки и предоставим примеры кода, иллюстрирующие каждый подход.

Метод 1: укажите значения по умолчанию

Один из способов справиться с ошибкой «Laravel Lighthouse не может вернуть значение NULL для поля, не допускающего значения NULL», — предоставить значения по умолчанию для полей, не допускающих значение NULL. Присвоив значение по умолчанию полю, не допускающему значения NULL, вы можете быть уверены, что оно всегда возвращает значение, даже если базовые данные отсутствуют. Вот пример:

type User {
  name: String!
}
type Query {
  user(id: ID!): User!
}
class UserResolver
{
  public function user($root, array $args)
  {
    $user = User::find($args['id']);
    return $user ?? new User(['name' => 'Unknown']);
  }
}

В этом примере, если пользователь с указанным идентификатором не найден, мы возвращаем новый экземпляр класса User с именем по умолчанию «Неизвестно».

Метод 2: обработка нулевых значений в резольверах

Другой подход — обработка нулевых значений непосредственно в преобразователях. Вместо возврата значения NULL для поля, не допускающего значения NULL, вы можете создать исключение или вернуть значимое сообщение об ошибке. Вот пример:

type User {
  name: String!
}
type Query {
  user(id: ID!): User!
}
class UserResolver
{
  public function user($root, array $args)
  {
    $user = User::find($args['id']);
    if (!$user) {
      throw new \Exception('User not found');
    }
    return $user;
  }
}

В этом примере, если пользователь с указанным идентификатором не найден, мы создаем исключение с соответствующим сообщением об ошибке.

Метод 3. Используйте поля, допускающие значение NULL

Если поле, не допускающее значения NULL, является необязательным и в некоторых случаях может законно иметь значение NULL, вы можете рассмотреть возможность изменения его на поле, допускающее значение NULL, в вашей схеме. Таким образом, вы можете вернуть значение null для этих случаев, не вызывая ошибку «Laravel Lighthouse Cannot Return Null for Non-Nullable Field». Вот пример:

type User {
  name: String
}
type Query {
  user(id: ID!): User!
}
class UserResolver
{
  public function user($root, array $args)
  {
    $user = User::find($args['id']);
    return $user;
  }
}

В этом примере мы изменили поле name, сделав его допускающим значение NULL, удалив восклицательный знак. Теперь, если пользователь с указанным идентификатором не найден, преобразователь userвернет значение null для поля name.

Ошибку «Laravel Lighthouse не может вернуть значение NULL для поля, не допускающего значения NULL» можно эффективно устранить с помощью различных методов. Предоставляя значения по умолчанию, обрабатывая значения NULL в преобразователях или используя поля, допускающие NULL, вы можете гарантировать, что поля, не допускающие NULL, в вашей схеме GraphQL всегда возвращают значение. Выберите метод, который лучше всего соответствует вашим потребностям и обеспечивает целостность ответов API.

Не забудьте внимательно просмотреть схему GraphQL и поток данных, чтобы определить потенциальные области, в которых может возникнуть эта ошибка. Внедрив соответствующий механизм обработки ошибок, вы сможете улучшить взаимодействие с пользователем и повысить надежность API GraphQL на базе Laravel Lighthouse.