getModel()->getSourceClass(); // Only site trees have the get_by_link capability if ($class !== SiteTree::class && !is_subclass_of($class, SiteTree::class)) { return; } Schema::invariant( !$query->isList(), 'Plugin %s cannot be applied to queries that return lists. Query "%s" is a list', static::getIdentifier(), $query->getName() ); $fieldName = $this->config()->get('field_name'); $query->addArg($fieldName, 'String'); $query->addResolverAfterware([static::class, 'applyLinkFilter']); } /** * @param $obj * @param array $args * @param array $context * @param ResolveInfo $info * @param callable $done * @return SiteTree|DataList|null */ public static function applyLinkFilter( $obj, array $args, array $context, ResolveInfo $info, callable $done ) { $fieldName = static::config()->get('field_name'); $filterLink = $args['filter'][$fieldName] ?? null; $argLink = $args[$fieldName] ?? null; $filterLink = $filterLink ?: $argLink; if ($filterLink) { $done(); return SiteTree::get_by_link($filterLink); } return $obj; } }