core icon indicating copy to clipboard operation
core copied to clipboard

Call to protected method splitPropertyParts() from scope AbstractFilter

Open danaki opened this issue 1 year ago • 0 comments

api-platform v3.3

GraphQL error:

{
  "errors": [
    {
      "message": "Internal server error",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "producedItems"
      ],
      "extensions": {
        "debugMessage": "Call to protected method ApiPlatform\\Doctrine\\Orm\\Filter\\SearchFilter::splitPropertyParts() from scope ApiPlatform\\Doctrine\\Orm\\Filter\\AbstractFilter",
        "file": "C:\\work\\lionel-api\\vendor\\api-platform\\core\\src\\Doctrine\\Orm\\PropertyHelperTrait.php",
        "line": 66,
        "trace": [
          {
            "file": "C:\\work\\lionel-api\\vendor\\api-platform\\core\\src\\Doctrine\\Orm\\Filter\\SearchFilter.php",
            "line": 186,
            "call": "ApiPlatform\\Doctrine\\Orm\\Filter\\AbstractFilter::addJoinsForNestedProperty()"
          },
          {
            "file": "C:\\work\\lionel-api\\vendor\\api-platform\\core\\src\\Doctrine\\Orm\\Filter\\AbstractFilter.php",
            "line": 44,
            "call": "ApiPlatform\\Doctrine\\Orm\\Filter\\SearchFilter::filterProperty()"
          },
          {
            "file": "C:\\work\\lionel-api\\vendor\\api-platform\\core\\src\\Doctrine\\Orm\\Extension\\FilterExtension.php",
            "line": 63,
            "call": "ApiPlatform\\Doctrine\\Orm\\Filter\\AbstractFilter::apply()"
          },
          {
            "file": "C:\\work\\lionel-api\\vendor\\api-platform\\core\\src\\Doctrine\\Orm\\State\\CollectionProvider.php",
            "line": 74,
            "call": "ApiPlatform\\Doctrine\\Orm\\Extension\\FilterExtension::applyToCollection()"
          },

....

entity defined like so;

#[ORM\Entity(repositoryClass: ProducedItemRepository::class)]
#[ApiResource(
    security: "is_granted('ROLE_USER')",
    order: ['id' => 'DESC'],
    normalizationContext: ['groups' => ["produced_item:query"]],
    denormalizationContext: ['groups' => ["produced_item:mutation"]],
    operations: [
        new Get(),
        new GetCollection(),
        new Post(),
    ],
    graphQlOperations: [
        new Query(),
        new QueryCollection(),
        new Mutation(name: 'create'),
    ]
)]
#[ApiFilter(SearchFilter::class, properties: [
    "package.packageCode" => "exact",
])]
class ProducedItem
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    protected ?int $id;

    #[ORM\ManyToOne(targetEntity: Package::class)]
    #[ORM\JoinColumn(nullable: false)]
    #[Groups(["produced_item:query", "produced_item:mutation"])]
    #[ApiProperty(readableLink: false, writableLink: false)]
    protected Package $package;

....

Failing GraphQL query:

{
  producedItems(
    package_packageCode: "000000000000000001"
  ) {
    edges {
      node {
        id
      } 
      cursor
    }
    pageInfo {
      endCursor
      startCursor
      hasNextPage
      hasPreviousPage
    }
    totalCount
  }
}

danaki avatar Aug 13 '24 21:08 danaki