使用带有部分插入的映射器copyfrom方法的SQL Server数据库的fatfreeframework

时间:2017-04-13 15:57:32

标签: sql-server mapper fat-free-framework identity-insert

我正在尝试使用fatfree框架v3.5的copyFrom(' POST')和save()方法插入记录。来自POST的数据不包含id字段,该字段将此表设置为自动增量。日志中的SQL是

SET IDENTITY_INSERT [xrefs] ON;

INSERT INTO [xrefs] ([status], [supply_id], [description], [unit], [unitcost], [cap], [rev], [buq]) 
VALUES ('test', 'Htest', 'test', 'test', '1', '1', 1, 1)

正如您所看到的,fatfree正在添加set identity insert,尽管插入中没有包含id列。有没有办法告诉mapper不要设置这个标志?或者还有另一种解决方法吗?我可以获得当前的最大ID然后插入+1,但这看起来很笨拙。

我应该添加此SQL失败,因为列列表中不包含id列。

$this->db->exec(
            (preg_match('/mssql|dblib|sqlsrv/',$this->engine) &&
            array_intersect(array_keys($pkeys),$ckeys)?
                'SET IDENTITY_INSERT '.$this->table.' ON;':'').
            'INSERT INTO '.$this->table.' ('.$fields.') '.
            'VALUES ('.$values.')',$args
        );

这是在mapper.php函数insert中设置IDENTITY_INSERT的代码。

$this->logger->write( 'xrefs schema:'. 
   json_encode( $this->tongpodb->schema( 'xrefs' ) ) );

在db对象上调用schema会返回此数组 {" ID" {"类型":" INT"" pdo_type":1,"默认":空"可空":假," p键":真}" changed_date" {"类型":"日期时间&#34 ;," pdo_type":2"默认":空,"可空":真," p键":假}&#34 ;状态" {"类型":" VARCHAR"" pdo_type":2"默认":空,&#34 ;可空":假," p键":假}" supply_id" {"类型":" VARCHAR"&# 34; pdo_type":2"默认":空,"可空":假," p键":真}"描述&#34 ;:{"类型":" VARCHAR"" pdo_type":2"默认":空,"可空&#34 ;:真," p键":假}"单元" {"类型":" VARCHAR"" pdo_type&# 34;:2"默认":空,"可空":假," p键":假}" HCPCS":{& #34;类型":"炭"" pdo_type":2"默认":空,"可空":真, " p键":假}"单元成本" {"类型":"十进制"" pdo_type":2"默认":空,"可空":假," p键":假}"帽" {"类型":"十进制"&#34 ; pdo_type":2"默认":空,"可空":假," p键":假}"转" :{"类型":" SMALLINT"" pdo_type":1,"默认":空,"可空" :假," p键":假}" BUQ" {"类型":" SMALLINT"" pdo_type&#34 ;:1,"默认":空,"可空":真," p键":假}" create_ts" {&# 34;类型":"日期时间"" pdo_type":2"默认":空,"可空":真,& #34; p键":假}" log_ts" {"类型":" INT"" pdo_type":1, "默认":空,"可空":真," p键":假}"文件名" {"类型&# 34;:" VARCHAR"" pdo_type":2"默认":空,"可空":真," p键& #34;:假}" LINE_NO" {&#3 4;类型":" SMALLINT"" pdo_type":1,"默认":空,"可空":真,& #34; p键":假}" file_ts" {"类型":"日期时间"" pdo_type":2, "默认":空,"可空":真," p键":假}}

正如您所看到的,id有一个" pkey":true条目,因此可以查看post中的字段,然后查看此内容并确定是否需要设置IDENTITY_INSERT。也许我会实现这个。我担心这高于我的薪水。

1 个答案:

答案 0 :(得分:0)

更新到fatfree的最新版本解决了这个问题。