【问题标题】:GraphQL Where clause with boolean doesnt work (wpgraphql)带有布尔值的 GraphQL Where 子句不起作用(wpgraphql)
【发布时间】:2019-04-10 15:53:17
【问题描述】:

我在 Wordpress 中使用 GraphQL 作为 API 和这个插件:https://docs.wpgraphql.com/getting-started/custom-fields-and-meta 我创建了自定义字段,我想将 where 子句用于布尔属性,但我得到了所有记录,即使是那些与我的 where 子句不匹配的记录

我的查询如下所示:

    query pagesInMenu {
 pages(where: { menu: true }) {
    edges {
      node {
        id
        menu
        title
      }
    }
  }
}

我得到 menu = false 和 menu = true 的记录... 它是通过下面的 PHP 代码添加的自定义字段:

function registerMenu($type) {
    register_graphql_field( $type, 'menu', [
        'type' => 'Boolean',
        'description' => __( 'Is in menu?', 'wp-graphql' ),
        'resolve' => function( $post ) {
            $menu = get_post_meta( $post->ID, 'menu', true );
            return ! empty( $menu ) ? ($menu == "true") : false;
        }
    ] );
}

add_action( 'graphql_register_types', registerMenu('Page') );
add_action( 'graphql_register_types', registerMenu('RootQueryToPageConnectionWhereArgs') );

【问题讨论】:

  • 我会尝试filter_var(...) 而不是那种比较;那是return filter_var($menu, FILTER_VALIDATE_BOOLEAN);
  • @MiroHudak 我按照您推荐的 PHP 代码进行了更改,现在我仍然得到所有记录,但菜单:false 到处都是,我在这个问题上很新,我尝试了一些更改返回语句但没有到目前为止的运气。 :(
  • @KryštofKošut 你解决过这个问题吗?我今晚遇到了同样的问题。

标签: php graphql where-clause wp-graphql


【解决方案1】:

这里有几处不正确:

  1. WordPress 操作:您应该传递一个接受参数 passed by the action itself 的可调用(即函数 function name),而不是您想出的任何内容。
  2. GraphQL 连接,其中 args 不应该在字段上有解析器。用户提供一个值,然后 ConnectionResolver 将 args 设置为查询,using graphql_connection_query_args 或类似的东西。

这是您提供的基本级别的外观:

function register_menu() {
  register_graphql_field( 
    'Page',
    'isInMenu',
    [
      'type' => 'Boolean',
      'description' => __( 'Is in menu?', 'wp-graphql' ),
      'resolve' => function( $post ) {
          $menu = get_post_meta( $post->ID, 'menu', true );
          return ! empty( $menu );
        }
    ]
  );

  register_graphql_field(
    'RootQueryToPageConnectionWhereArgs'
    'showInMenu'
    [
      'type' => 'Boolean',
      'description' => __( 'Filter results by whether page is in a menu', 'my-plugin' ),
    ]
  );
}

add_action( 'graphql_register_types', 'register_menu' );

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多