【问题标题】:CodeIgniter ActiveRecord join statement dropping '[' from the ON clauseCodeIgniter ActiveRecord 连接语句从 ON 子句中删除 '['
【发布时间】:2012-07-23 16:23:51
【问题描述】:

使用 Codeigniter (v1.7.2) Active Record 类查询 MSSQL 数据库(外部数据库,我不控制表名或字段名)

以下代码:

$this->db->select('[Key Field], MemberInfo.OtherField');
$this->db->limit(10);
$this->db->from('primaryTable');
$this->db->join('MemberInfo', '[Member Number] = Member_Number', 'left');
$this->db->where('[Member Number]  = 573');
$this->db->where('[Incident Date] BETWEEN '. $DateStart . ' AND ' . $DateEnd);

产生以下查询(有语法错误)

SELECT  TOP 10 [Key Field], MemberInfo.OtherField
FROM primaryTable
LEFT JOIN MemberInfo ON Member Number] = Member_Number
WHERE [Member Number] = '573'
AND [Incident Date] BETWEEN 2012-01-01 AND 2012-07-19

注意 JOIN 子句,它缺少字段名称上的开头 '['

我尝试使用双引号,结果相同。

任何人有想法,这是 1.7.2 中的一个已知错误(我知道这是旧的,正在更新)?

更新 2.1.2 中也存在问题

下面接受的答案也是 2.1.2 的修复:更改 JOIN 函数中的正则表达式检查以查找开头 [

【问题讨论】:

    标签: sql-server codeigniter activerecord


    【解决方案1】:

    问题出在参数ON。框架中不存在集成解决方案(版本 2 中没有)。

    你有两个选择:

    1. Altering the core of the library active_record

    2. 使用$this->db->query()将查询写成一个完整的链式连接;

    【讨论】:

    • 在 v1.7.2(我正在使用)中,function join 中的正则表达式需要修改为:/([\[\w\.]+)([\W\s]+)(.+)/ 以便捕获第一个左括号。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    相关资源
    最近更新 更多