- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
首先,我对 kohana 很陌生,但我对更流行的 Yii 和 Yii2 有丰富的经验。
我正在处理复杂的配置,它使用查询生成器从跳跃模型调用 MsSQL 数据库。现在我不得不优化代码,但遇到了一个错误,我自己很难解决。
对 MsSQL 数据库的请求分为两部分。这是子查询,它应该执行:
$leap_subquery = DB_SQL::select($this->data_source())
->column('lg.SessionID','SESSION_ID')
->column(DB_SQL::expr("CAST(DATEADD(HOUR, 3, lg.MsgTimestamp) AS DATE)"),'ACTIVITY_DT')
->column(DB_SQL::expr("CAST(DATEADD(HOUR, 3, lg.MsgTimestamp) AS TIME(0))"),'ACTIVITY_TM')
->column(DB_SQL::expr("RIGHT(REPLACE(cr.ORIGINATINGNUMBER,'tel:',''),10)"),'PHONE_NUM')
->column(DB_SQL::expr("RIGHT(REPLACE(cr.DESTINATIONNUMBER,'tel:',''),5)"),'DESTINATION_NUM')
->column(DB_SQL::expr("CAST(CASE
WHEN UPPER(lg.ActivityName) = 'VDUID' THEN lg.VarValue
ELSE NULL
END AS VARCHAR(50))"),'CALL_ID')
->column(DB_SQL::expr("CASE
WHEN UPPER(LEFT(lg.ActivityName,21)) = 'КАЧЕСТВО_ОБСЛУЖИВАНИЯ'
THEN CAST(RIGHT(lg.ActivityName,1) AS NUMERIC)
ELSE NULL
END"),'SERVICE_QUALITY')
->column(DB_SQL::expr("CASE
WHEN UPPER(LEFT(lg.ActivityName,15)) = 'СКОРОСТЬ_ОТВЕТА'
THEN CAST(RIGHT(lg.ActivityName,1) AS NUMERIC)
ELSE NULL
END"),'RESPONSE_SPEED')
->column(DB_SQL::expr("CASE
WHEN UPPER(LEFT(lg.ActivityName,12)) = 'ВОПРОС_РЕШЁН' AND RIGHT(lg.ActivityName,1) = '1' THEN 1
WHEN UPPER(LEFT(lg.ActivityName,12)) = 'ВОПРОС_РЕШЁН' AND RIGHT(lg.ActivityName,1) = '2' THEN 0
ELSE NULL
END"),'QUESTION_SOLUTION')
->column(DB_SQL::expr("CASE
WHEN UPPER(LEFT(lg.ActivityName,18)) = 'ДОБРОЖЕЛАТЕЛЬНОСТЬ'
THEN CAST(RIGHT(lg.ActivityName,1) AS NUMERIC)
ELSE NULL
END"),'AMIABILITY')
->column(DB_SQL::expr("CASE
WHEN UPPER(LEFT(lg.ActivityName,7)) = 'ЯСНОСТЬ'
THEN CAST(RIGHT(lg.ActivityName,1) AS NUMERIC)
ELSE NULL
END"),'CLEARNESS')
->column(DB_SQL::expr("CASE
WHEN UPPER(LEFT(lg.ActivityName,14)) = 'ВНИМАТЕЛЬНОСТЬ'
THEN CAST(RIGHT(lg.ActivityName,1) AS NUMERIC)
ELSE NULL
END"),'ATTENTION')
->from('VPStats.dbo.VPAppLog','lg')
->join('INNER','VPStats.dbo.CDR','cr')->on('cr.SESSIONID','=','lg.SessionID')
->where(DB_SQL::expr("CAST(DATEADD(HOUR, 3, lg.MsgTimestamp) AS DATE)"), '=', DB_SQL::expr("CAST('".$date."' AS DATE)"))
->where(DB_SQL::expr("UPPER(lg.ApplicationID)"), '=', 'QUALITY')
->where_block('(')
->where(DB_SQL::expr("UPPER(LEFT(lg.ActivityName,21))"), '=', 'КАЧЕСТВО_ОБСЛУЖИВАНИЯ' )
->where(DB_SQL::expr("UPPER(LEFT(lg.ActivityName,15))"), '=', 'СКОРОСТЬ_ОТВЕТА', 'OR')
->where(DB_SQL::expr("UPPER(LEFT(lg.ActivityName,12))"), '=', 'ВОПРОС_РЕШЁН', 'OR')
->where(DB_SQL::expr("UPPER(LEFT(lg.ActivityName,18))"), '=', 'ДОБРОЖЕЛАТЕЛЬНОСТЬ', 'OR')
->where(DB_SQL::expr("UPPER(LEFT(lg.ActivityName,7))"), '=', 'ЯСНОСТЬ', 'OR')
->where(DB_SQL::expr("UPPER(LEFT(lg.ActivityName,14))"), '=', 'ВНИМАТЕЛЬНОСТЬ', 'OR')
->where(DB_SQL::expr("UPPER(lg.ActivityName)"), '=', 'VDUID', 'OR')
->where_block(')')
->statement(FALSE);
但是下一个查询应该从第一个查询中查询一些数据:
$leap_query = DB_SQL::select($this->data_source())
->column(DB_SQL::expr("MAX(VP.ACTIVITY_DT"), 'date' )
->column(DB_SQL::expr("MAX(VP.ACTIVITY_TM"), 'time' )
->column(DB_SQL::expr("MAX(VP.PHONE_NUM)"), 'number' )
->column(DB_SQL::expr("MAX(VP.SERVICE_QUALITY)"), 'answer_1' )
->column(DB_SQL::expr("MAX(VP.QUESTION_SOLUTION)"), 'answer_2' )
->column(DB_SQL::expr("MAX(VP.RESPONSE_SPEED)"), 'answer_3' )
->column(DB_SQL::expr("MAX(VP.AMIABILITY)"), 'answer_4' )
->column(DB_SQL::expr("MAX(VP.CLEARNESS)"), 'answer_5' )
->column(DB_SQL::expr("MAX(VP.ATTENTION)"), 'answer_6' )
->column(DB_SQL::expr("MAX(VP.DESTINATION_NUM)"), 'skill' )
->column(DB_SQL::expr("MAX(VP.CALL_ID)"), 'call_id' )
->from(DB::expr("(".$leap_subquery.")"), 'VP')
->group_by(array('VP.SESSION_ID'))
->having(DB_SQL::expr("MAX( CALL_ID )"), 'IS NOT', NULL)
->having_block('(')
->having(DB_SQL::expr("MAX(VP.SERVICE_QUAILITY)"), 'IS NOT', NULL )
->having(DB_SQL::expr("MAX(VP.RESPONSE_SPEED)"), 'IS NOT', NULL, 'OR')
->having(DB_SQL::expr("MAX(VP.QUESTION_SOLUTION)"), 'IS NOT', NULL, 'OR')
->having(DB_SQL::expr("MAX(VP.AMIABILITY)"), 'IS NOT', NULL, 'OR')
->having(DB_SQL::expr("MAX(VP.CLEARNESS)"), 'IS NOT', NULL, 'OR')
->having(DB_SQL::expr("MAX(VP.ATTENTION)"), 'IS NOT', NULL, 'OR')
->having_block(')');
但是如果第一个 block 给我一个结果,调用第二个 block 给我一个与...echm...翻译有关的错误??? ……:
ErrorException [ Notice ]: Array to string conversion
SYSPATH/classes/kohana/i18n.php [ 164 ]
return empty($values) ? $string : strtr($string, $values);
我完全无法理解。我猜想在某些地方出现了语法错误并且构建器无法解决这个问题,但我只能猜测和谷歌......请帮助我理解这个员工的性质......!?
向上:对正在尝试翻译的字符串进行 var 转储,并得到错误的字符串)):
function __($string, array $values = NULL, $lang = 'en-us')
{
var_dump($string, $values, $lang);die();
.......
return empty($values) ? $string : strtr($string, $values);
}
string(55) "Message: Failed to query SQL statement. Reason: :reason" array(1) { ':reason' => array(5) { [0] => string(5) "00000" [1] => int(0) [2] => string(3276) "(null) [0] (severity 0) [SELECT MAX(VP.ACTIVITY_DT AS [date], MAX(VP.ACTIVITY_TM AS [time], MAX(VP.PHONE_NUM) AS [number], MAX(VP.SERVICE_QUALITY) AS [answer_1], MAX(VP.QUESTION_SOLUTION) AS [answer_2], MAX(VP.RESPONSE_SPEED) AS [answer_3], MAX(VP.AMIABILITY) AS [answer_4], MAX(VP.CLEARNESS) AS [answer_5], MAX(VP.ATTENTION) AS [answer_6], MAX(VP.DESTINATION_NUM) AS [skill], MAX(VP.CALL_ID) AS [call_id] FROM (SELECT [lg].[SessionID] AS [SESSION_ID], CAST(DATEADD(HOUR, 3, lg.MsgTimestamp) AS DATE) AS [ACTIVIT"... [3] => int(0) [4] => int(0) } } string(5) "en-us"
也许任何人...我看到查询看起来很奇怪。 SQL中应该有“[”&“]”吗?
最佳答案
这里是错误:
->from(DB::expr("(".$leap_subquery.")"), 'VP')
应该是:
->from($leap_subquery, 'VP')
并且不执行$leap_subquery
关于php - 带有查询生成器的 kohana i18n errorException (kohana->leap->mssql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400482/
我一直在使用 Kohana 2.3.7。有一些因素阻碍我们使用 Kohana 3,其中之一是与 2.3.7 相比缺少模块。例如,我似乎找不到2.3至3中存在的支付模块(Paypal、2C0、Autho
如果我在 https://www.example.com/test?page=123 页面上,我如何使用 Kohana 获得这个完整路径(proto + host + URI + query)? 我试
在我的应用程序中,我有一个执行大约 1000 次的循环,在其中我创建对象并保存它。这是应用程序的一部分,我用数据填充数据库。一般来说,这看起来像这样: foreach(...){ ...
如果我在 https://www.example.com/test?page=123 页面上,我如何使用 Kohana 获得这个完整路径(proto + host + URI + query)? 我试
我正在使用 ORM Auth 模块,但很难弄清楚如何做到这一点。我尝试过这种情况: $user = ORM::factory('user', $id);$user->roles->delete_all
好的,我试过到处搜索,但似乎无法得到一个简单直接的答案。 我想将日志消息( INFO 、 ERROR 等)写入 Kohana 日志文件 /application/logs/YYYY/MM/DD.php
我的问题是关于多词 MySQL 表名的约定,例如“comments_flags”,它不是数据透视表。 “comments_flags”的正确数据库表名是什么? 相应的型号名称是什么? 感谢您的任何建议
尝试在我的 Kohana 2.3.4 安装上运行 PHPUnit: phpunit --colors --bootstrap=index.php ../../modules/phpunit/libra
我是 kohana 的新手。我正在使用 ORM 来获取数据。 我想建立一个查询,其中 BETWEEN条款在那里。如下 SELECT `rooms`.* FROM `rooms` LEFT JOIN `
在 Kohana 3.3 的 DOCROOT 文件夹中,有一个新的 vendor 文件夹。 它有什么用? 最佳答案 它不应该在那里。这是 Composer 留下的。 关于kohana - Kohana
如何让它发挥作用? $stuff = ORM::factory('mytable') ->with('user') ->with('other_stuff') ->find_a
我注意到,当我开始使用它们时,Kohana 3 ORM 会为我的每个模型运行“显示完整列”: SHOW FULL COLUMNS FROM `mytable` 此查询可能需要几个时钟周期才能执行(在
全新安装了 Kohana 3.1。试图让我自己的 helper 。我在 application/classes/helpers/目录中创建了一个助手。我调用了文件 javascript.php,该类称
在 Kohana 2.x 中,有一个 $file = Kohana::log_directory(); 可以根据发送的参数获取或设置目录。 如何在Kohana 3.1下得到类似的效果? 我想读取日志目
使用 native ORM 在 Kohana(3.3) 中防止 SQL 注入(inject)的最佳方法是什么? 或者默认情况下它是“安全的”.. 最佳答案 默认情况下是安全的,因为它使用 Kohana
如何在 Kohana 3.2 中调用验证对象的 trim 函数?我正在使用: $post = Validation::factory($this->request->post()); $post->r
首先,我对 kohana 很陌生,但我对更流行的 Yii 和 Yii2 有丰富的经验。 我正在处理复杂的配置,它使用查询生成器从跳跃模型调用 MsSQL 数据库。现在我不得不优化代码,但遇到了一个错误
我正在尝试在 Kohana 3.3.0 中将 Auth 模块与 ORM 驱动程序一起使用,但我唯一能做的就是在数据库中插入新用户。我不能用他们登录。 我从一个空白的 Kohana 项目、一个简单的路由
我有一个简单的users表,我想找到所有用户在哪里email_notifications = 1。 逻辑规定以下应该起作用: class Controller_Test extends Control
我需要生成这样的查询: SELECT * FROM `table1` WHERE `date1` where('date1','execute(); $foo = array(); foreach (
我是一名优秀的程序员,十分优秀!