【问题标题】:Migrating coldfusion application to Lucee将 Coldfusion 应用程序迁移到 Lucee
【发布时间】:2018-08-10 09:59:27
【问题描述】:

我们的服务器正在从 Coldfusion 更改为 Lucee 服务器,我的任务是更新几个 Web 应用程序的代码。我不是 Coldfusion 的专家,但我经常能想办法解决问题,为此我的问题。

我正在转换的代码抛出此错误: 无法将对象类型 [DateTime] 转换为 [Array] 类型的值

我一直在处理所有查询,并确保输出是适当的 CAST,这已经解决了大部分问题,但是困扰我的一小段代码引发了上述错误。代码是:

<cfset summaryStartDate = ArrayMin( qSummaryData["minHours"] ) />
<cfset summaryMaxDate = ArrayMax( qSummaryData["maxHours"] ) />
<cfset summaryEndDate = DateAdd("d", -(DayofWeek(#summaryMaxDate#))+6, #summaryMaxDate# ) />

minHours 和 maxHours 都是 DATETIME 格式。我知道在coldfusion版本中他们输出如下:

summaryStartDate: 41204 摘要最大日期:43465 summaryEndDate: {ts '2019-01-04 00:00:00'}

对我来说,这意味着 Coldfusion 正在以某种方式进行转换,而 Lucee 没有这样做(或者至少从我所读到的内容来看)。数据库为 mySQL,minHours 和 maxHours 输出为日期,时间为 00:00:00,供参考。

我可能遗漏了一些明显的东西,但我看不到。

【问题讨论】:

  • 错误来自哪一行,第一行?
  • @andrewdixon 好问题。我得到的输出是第 449 行,它作为 codePrintPlain 输出:codePrintPlain": "447: \t\t\t\n448: \t\t\t\t\t\t\n449: \t\t\n450: \t\t\t\t\n451: \t\t \n
  • @andrewdixon 我已经注释掉了每一个,看看它是否只有一个,但前两个肯定会抛出相同的错误,而第三个会抛出前两个不存在的错误。
  • @andrewdixon 嗨,安德鲁。正确的 qSummaryData 是在这些 cfset 之前发生的查询,所以你是正确的,它是列输出。根据我收集的代码序列,ArrayMin 的目的是选择该集合中最早的日期,而我认为 ArrayMax 将是最近的日期,coldfusion 正在做一些工作以使其作为一个数组工作。我会尝试重写那些,所以我完全避免了数组传输,并希望能解决它。
  • 根据查询的使用方式,您也可以在 SQL 中执行 MIN/MAX 而不是 CF...

标签: mysql coldfusion lucee


【解决方案1】:

我以“这不是最好的解决方法”作为这个答案的开头,但它确实有效。从 andrewdixon 那里拿我的队列,我研究了使用数组(数据不适合)并查看替代方案。

我确定了一个查询查询,提取最小值,然后将其设置在 cfset 中。之后对最大值执行相同的操作。我的两个查询是:

<cfquery name="smallestFigure" dbtype="query">SELECT CAST(MIN(minHours) AS DATETIME) as outputMin FROM qSummaryData;</cfquery>
<cfquery name="largestFigure" dbtype="query">SELECT CAST(MAX(maxHours) AS DATETIME) as outputMax FROM qSummaryData;</cfquery>

我将这些设置为 summaryStartDate 和 summaryMaxDate 以便这条线(在原始帖子中提到)可以运行:

<cfset summaryEndDate = DateAdd("d", -(DayofWeek(#summaryMaxDate#))+6, #summaryMaxDate# ) />

Shawn 提到我不需要在summaryMaxDate 周围加上#,但我还没有做出改变。 andrewdixon 提到使用 query.reduce() 作为替代方案,我想这会比我所做的更简洁,所以如果有人提出更好的解决方案,请发布作为答案。

也感谢大家的支持和想法。

【讨论】:

  • 总体上如何使用最小/最大日期?可以在原始查询或代码(没有 QoQ)中完成吗?只是想知道是否还有其他选择......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多