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.