如何在Directus嵌套关联中使用deep进行深层过滤?
Directus中deep参数嵌套数组关联过滤问题
我在Directus里用deep参数处理嵌套关联过滤时遇到问题:顶级的translations按languages_code: 'nl-NL'过滤是有效的,但variants数组下嵌套的translations数组用同样的规则过滤却没效果。我要的是把variants里那些translations中languages_code不等于nl-NL的项过滤掉。
当前无效的查询代码
deep: { translations: { _filter: { languages_code: 'nl-NL' } }, variants: { _filter: { translations: { languages_code: 'nl-NL' } } }, // 这里不生效 }
待过滤的数据结构
{ // 生效:translations: { _filter: { languages_code: locals.language } } translations: [ { id: 7, products_id: 1, languages_code: 'nl-NL', // locals.language = nl-NL title: '...', description: '...', slug: '...', variantTitle: null, }, ], // 不生效:variants: { _filter: { translations: { languages_code: locals.language } } } // 推测是因为variants本身是数组,里面的translations也是数组 variants: [ { id: 1, product: 1, translations: [ { id: 1, product_variants_id: 1, languages_code: 'nl-NL', title: 'Aantal', }, { id: 2, product_variants_id: 1, languages_code: 'en-US', // 这个对象需要被过滤掉 title: 'Amount', }, ], products: [2, 3], }, ], }
解决方案
要实现嵌套数组的过滤,需要在variants的配置里再嵌套一层deep参数,对其内部的translations单独设置过滤规则,正确写法如下:
deep: { translations: { _filter: { languages_code: 'nl-NL' } }, variants: { deep: { translations: { _filter: { languages_code: 'nl-NL' } } } } }
原因是variants本身是关联数组,每个variant内部又包含translations数组关联,必须通过嵌套deep参数深入到第二层关联,才能精准过滤variants下的translations条目,只保留符合languages_code条件的内容。
内容的提问来源于stack exchange,提问作者Red
相关产品推荐
相关产品推荐

