Если объект, такой как Array или Struct, используется в качестве значения столбца строки в объекте запроса CF. Можно ли использовать свойства этого объекта в предложении WHERE запроса запросов для ограничения набора результатов?
Дано:
<cfset local.exampleArray=[
{ id:1,
nestedArray:["Tom","Dick","Harry"],
nestedStruct:{nid:42,name:"unknown"}
},
{ id:2,
nestedArray:["John","Paul","Ringo","George"],
nestedStruct:{nid:12,name:"rockstars"}
},
{ id:3,
nestedArray:["Bonny","Clyde"],
nestedStruct:{nid:43,name:"criminals"}
},
]>
<cfset local.exampleQuery=queryNew("id,nestedArray,nestedStruct","integer,object,object",local.exampleArray)>
Запросы запросов:
<cfquery dbtype="query" name="local.exampleQoQ">
SELECT *
FROM [local].exampleQuery
WHERE nestedStruct.nid=12
</cfquery>
<cfquery dbtype="query" name="local.exampleQoQ2">
SELECT *
FROM [local].exampleQuery
WHERE nestedArray.length=3
</cfquery>
Приводит к ошибке выполнения запроса запросов: nestedStruct.nid/nestedArray.length не соответствует ни одной таблице в списке таблиц FROM.
Если не использовать столбцы типа объекта в предложении WHERE, объекты возвращаются правильно при запросе и ведут себя так, как ожидалось:
<cfquery dbtype="query" name="local.exampleQoQ">
SELECT *
FROM [local].exampleQuery
WHERE id=1
</cfquery>
<cfoutput query="local.exampleQoQ">
#local.exampleQoQ.id#:#ArrayLen(local.exampleQoQ.nestedArray)#:#local.exampleQoQ.nestedStruct.nid#
</cfoutput>
В результате получится "1:3:42"
Является ли это просто проблемой, когда реализация QoQ не поддерживает доступ к свойствам объекта значения столбца?
QueryFilter()
, если вы используете CF2016+. Ожидается ответ. - person Shawn   schedule 04.05.2019