2

I have a vocabulary (channel) with two levels. An article node can be added to the first or second level (via field_channel). The hierarchy looks like:

  • channel-1
    • subchannel-1.1
    • subchannel-1.2
    • subchannel-1.3
  • channel-2 (i.e. [node/1, node/2])
    • subchannel-2.1 (i.e. [node/4, node/5])
    • subchannel-2.2 (i.e. [node/6])

I want to filter all nodes that belongs to a term of level 1 (the ones which where assigned directly to the term and the ones which where assigned to one of its child terms).

In other words, filtering all nodes for a given channel (i.e. channel-2) should contain the nodes assigned to that channel directly and all nodes assigned to a sub-channel whose parent channels is that channel. In the example all nodes from 1 to 6.

The JSON:API request looks like:

{{base_url}}/node/article?
include=field_channel,field_channel.parent&
fields[node--article]=title,field_channel&
fields[taxonomy_term--channel]=name,parent&
filter[or-group][group][conjunction]=OR&
filter[channel][condition][path]=field_channel.name&
filter[channel][condition][value]=channel-2&
filter[channel][condition][memberOf]=or-group&
filter[channel-parent][condition][path]=field_channel.parent.name&
filter[channel-parent][condition][value]=channel-2&
filter[channel-parent][condition][memberOf]=or-group    

I don't see the error, but it only contains the nodes matching the channel-parent condition. If I remove that condition, the ones matching the channel condition are there. What is wrong with the request.

I also tried the short form:

{{base_url}}/node/article?
fields[node--article]=title,field_channel&
include=field_channel,field_channel.parent&
fields[taxonomy_term--channel]=name,parent&
filter[or-group][group][conjunction]=OR&
filter[field_channel.name][value]=channel-2&
filter[field_channel.name][memberOf]=or-group&
filter[field_channel.parent.name][value]=channel-2&
filter[field_channel.parent.name][memberOf]=or-group

Which gives me an error in the where clause (the empty group at the beginning):

WHERE (() and (taxonomy_term_field_data.name LIKE :db_condition_placeholder_0 ESCAPE '\\')

BTW: The example could be easily build by using the drupal thunder distribution.

5
  • I have a similar JSON request to your first example and it works without issue. The only difference I saw was that I explicitly set the condition operator, but eliminating that had no effect. I'm thinking the root cause of your problem lies elsewhere. – beltouche Mar 19 '20 at 13:43
  • Can you post your code for your query build? – dwcdev Mar 19 '20 at 21:23
  • @dwcdev Actually there is no code for the query build. – LarS Mar 20 '20 at 13:32
  • What are you using to build the query? – dwcdev Mar 22 '20 at 9:33
  • I used Postman. It is transforming the keys and values directly into a query. The query seems valid, doesn't it? {{base_url}} gets replaced with example.lndo.site/jsonapi, my local Lando development environment. As there is an SQL-Error JSON:API accepts the query and processes it, but with that empty group, which I don't know where it comes from. – LarS Mar 23 '20 at 12:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.