如何在 lighthouse-php 中使用 @method 指令正确地提供自定义查询?
Posted
技术标签:
【中文标题】如何在 lighthouse-php 中使用 @method 指令正确地提供自定义查询?【英文标题】:How to properly serve custom queries with @method directive in lighthouse-php? 【发布时间】:2021-07-10 18:22:36 【问题描述】:我正在使用 lighthouse 构建一个库存应用程序,并努力掌握使用复杂逻辑按需提供自定义查询的概念。
这是我正在尝试创建的近似查询:
statsReport
dailyTotalSales
dailyAverageSales
dailTotalItemsSold
newDailyCustomersCount
etc.
我正在考虑创建一个对象,它具有不同的方法来聚集这些对象。 我研究过创建自定义类型,就像这样
<?php
namespace App\Providers;
use GraphQL\Type\Definition\Type;
use Illuminate\Support\ServiceProvider;
use GraphQL\Type\Definition\ObjectType;
use Nuwave\Lighthouse\Schema\TypeRegistry;
class GraphQLServiceProvider extends ServiceProvider
/**
* Bootstrap services.
*
* @param TypeRegistry $typeRegistry
*
* @return void
* @throws \Nuwave\Lighthouse\Exceptions\DefinitionException
*/
public function boot(TypeRegistry $typeRegistry): void
$types = [
new ObjectType(
[
'name' => 'Stats',
'fields' => [
'dailyTotalSales' => [
'type' => Type::float(),
'description' => 'Daily Total Sales',
'resolve' => function()
return $this->dailyTotalSales();
,
],
],
]
),
];
foreach ($types as $type)
$typeRegistry->register($type);
public function dailyTotalSales()
return 1198.92
public function newDailyCustomersCount()
return 10
我注册了提供者但不知道如何查询这个类型?
还是我做错了,有更好的方法吗?
我必须以某种方式将其添加到schema.graphql
吗?
我可以创建一个自定义查询,但是我必须在 __invoke
方法中同时要求所有统计信息,我宁愿按需进行。例如,如果我提出这样的请求
statsReport
dailyTotalSales
newDailyCustomersCount
我会调用这两个方法执行。
【问题讨论】:
【参考方案1】:在Jason Adams的帮助下我有了问题的答案。
为了实现我所尝试的,您必须执行以下操作:
php artisan lighthouse:query StatsReport
像这样在 StatsReport 类中创建所需的方法(例如 averageDailySale)
<?php
namespace App\GraphQL\Queries;
class StatsReport
public function __invoke($_, array $args)
// This part is important otherwise it won't work.
return $this;
public function averageDailySale()
return 1122.12;
-
在
schema.graphql
中创建StatsReport
:
type Query
statsReport: StatsReport
type StatsReport
averageDailySale: Float @method
-
查询:
query
statsReport
averageDailySale
这样,如果您有复杂的计算,每个方法内部有多个 SQL 查询和复杂的逻辑,您将按需触发它们。
【讨论】:
以上是关于如何在 lighthouse-php 中使用 @method 指令正确地提供自定义查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在lighthouse graphql laravel中获取自定义指令参数?
如何缓存 auth()->user() 与 Laravel 缓存中的角色关系,以减少对数据库的调用?