我试图插入使用fatfreeframework v3.5的copyFrom('POST')和save()方法的记录。来自POST的数据不包含该表被设置为自动增量的ID字段。从日志的SQL是fatfreeframework与SQL Server数据库使用映射器copyfrom方法部分插入
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)
正如你可以看到尽管存在包含在插入没有ID列fatfree是将设定的标识插入。有没有办法告诉映射器不要设置这个标志?还是有另一种解决方法?我可以得到当前的最大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函数插入中设置IDENTITY_INSERT的代码。
$this->logger->write('xrefs schema:'.
json_encode($this->tongpodb->schema('xrefs')));
调用的db对象上架构还给此数组 { “ID”:{ “类型”: “INT”, “pdo_type”:1, “默认”:NULL, “可为空的”:假, “p键”:真正}, “changed_date”:{ “类型”: “日期时间”, “pdo_type”:2, “默认”:空, “可空”:真, “p键”:假}, “状态”: { “类型”: “VARCHAR”, “pdo_type”:2, “默认”:NULL, “可为空的”:假, “p键”:假}, “supply_id”:{ “类型”: “VARCHAR”, “pdo_type” :2, “默认”:NULL, “可为空的”:假, “p键”:真}, “说明”:{ “类型”: “VARCHAR”, “pdo_type”:2, “默认”:NULL, “可为空的” :真, “p键”:假}, “单元”:{ “类型”: “VARCHAR”, “pdo_type”:2, “默认”:NULL, “可为空的”:假, “p键”:假},“HCPCS “:{” 类型 “:” 字符 “ ”pdo_type“:2, ”默认“:空, ”可空“:真, ”p键“:假}, ”unitcost“:{ ”类型“: ”十进制“,” pdo_type “:2,” 默认 “:NULL,” 可为空的 “:假,” p键 “:假},” 帽 “:{”类型 “:” 小数”, “pdo_type”:2, “默认”:NULL, “可为空的”:假, “p键”:假}, “REV”:{ “类型”: “SMALLINT”, “pdo_type”:1 “默认”:空, “可空”:假的, “p键”:假}, “BUQ”:{ “类型”: “SMALLINT”, “pdo_type”:1, “默认”:空, “可空”:真, “p键”:假}, “create_ts”:{ “类型”: “日期时间”, “pdo_type”:2, “默认”:空, “可空”:真, “p键”:假}, “log_ts”: { “类型”: “诠释”, “pdo_type”:1, “默认”:空, “可空”:真, “p键”:假}, “文件名”:{ “类型”: “VARCHAR”, “pdo_type” :2, “默认”:NULL, “可为空的”:真, “p键”:假}, “LINE_NO”:{ “类型”: “SMALLINT”, “pdo_type”:1, “默认”:NULL, “可为空的” :true,“pkey”:false},“file_ts”:{“type”:“datetime”,“pdo_type”:2,“default”:null,“nullable”:true,“pkey”:false}}
正如你可以看到ID有一个“pkey”:真正的条目,所以你可以看看后的字段,然后看看这个,并确定是否需要设置IDENTITY_INSERT。也许我会执行这个。我担心这是高于我的薪酬水平。
请在框架bug跟踪器上报告该问题:github.com/bcosca/fatfree-core/issues – xfra35
我现在已经做到了。所以你认为这是一个错误?谢谢 –