首页 > 解决方案 > 无法为 API 平台和 graphql 上的不可空字段返回 null

问题描述

我有一个带有未映射属性的“用户”实体,如下所示:

namespace App\Entity\User;

// ...

/**
 * @var string
 * @Groups({"readAnnounce", "readUser"})
 */
private $lastUrlImageProfilValid;


/**
 * @return string
 */
public function getLastUrlImageProfilValid()
{
    foreach ($this->imageProfil as $image){
        if ($image->getIsValid()){
            return $image->getUrl();
        }
    }

    return null;
}

当我用 REST 调用这个实体时,它可以工作,但不能用 graphql,它返回这个错误:

无法为不可为空的字段 User.lastUrlImageProfilValid 返回 null

图形代码:

{
  users(
    first: 30,
  ) {
    edges {
      node {
        lastUrlImageProfilValid
      }
    }
  }
}

如何将未映射的属性设置为可为空?

标签: symfonygraphqlsymfony4nullableapi-platform.com

解决方案


您需要在 PHPDoc 中使该属性为空:

/**
 * @var null|string
 * @Groups({"readAnnounce", "readUser"})
 */
private $lastUrlImageProfilValid;

/**
 * @return null|string
 */
public function getLastUrlImageProfilValid()

或者,在 PHP 7.4 中:

/**
 * @Groups({"readAnnounce", "readUser"})
 */
private ?string $lastUrlImageProfilValid;

public function getLastUrlImageProfilValid(): ?string

推荐阅读