Vendor
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace Nuwave\Lighthouse\Schema\Directives;
|
||||
|
||||
use Nuwave\Lighthouse\Support\Contracts\DefinedDirective;
|
||||
use Nuwave\Lighthouse\Support\Contracts\ArgBuilderDirective;
|
||||
|
||||
class BuilderDirective extends BaseDirective implements ArgBuilderDirective, DefinedDirective
|
||||
{
|
||||
/**
|
||||
* Name of the directive.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function name(): string
|
||||
{
|
||||
return 'builder';
|
||||
}
|
||||
|
||||
public static function definition(): string
|
||||
{
|
||||
return /* @lang GraphQL */ <<<'SDL'
|
||||
"""
|
||||
Use an argument to modify the query builder for a field.
|
||||
"""
|
||||
directive @builder(
|
||||
"""
|
||||
Reference a method that is passed the query builder.
|
||||
Consists of two parts: a class name and a method name, seperated by an `@` symbol.
|
||||
If you pass only a class name, the method name defaults to `__invoke`.
|
||||
"""
|
||||
method: String!
|
||||
) on FIELD_DEFINITION
|
||||
SDL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dynamically call a user-defined method to enhance the builder.
|
||||
*
|
||||
* @param \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder $builder
|
||||
* @param mixed $value
|
||||
* @return \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function handleBuilder($builder, $value)
|
||||
{
|
||||
return call_user_func(
|
||||
$this->getResolverFromArgument('method'),
|
||||
$builder,
|
||||
$value,
|
||||
$this->definitionNode
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user