0

我正在尝试使用 fatfreeframework 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)

如您所见,尽管插入中没有包含 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":{"type":"int","pdo_type":1,"default":null,"nullable":false,"pkey":true}, "changed_date":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false},"status":{"type":"varchar" ,"pdo_type":2,"default":null,"nullable":false,"pkey":false},"supply_id":{"type":"varchar","pdo_type":2,"default":null ,"可为空":false,"pkey":true},"描述":{"type":"varchar","pdo_type":2,"default":null,"nullable":true,"pkey":false },“单元”:{"type":"varchar","pdo_type":2,"default":null,"nullable":false,"pkey":false},"hcpcs":{"type":"char","pdo_type" :2,"default":null,"nullable":true,"pkey":false},"unitcost":{"type":"decimal","pdo_type":2,"default":null,"nullable" :false,"pkey":false},"cap":{"type":"decimal","pdo_type":2,"default":null,"nullable":false,"pkey":false},"rev ":{"type":"smallint","pdo_type":1,"default":null,"nullable":false,"pkey":false},"buq":{"type":"smallint"," pdo_type":1,"默认":null,"可为空":true,"pkey":false},"create_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false} ,"log_ts":{"type":"int","pdo_type":1,"default":null,"nullable":true,"pkey":false},"filename":{"type":"varchar ","pdo_type":2,"default":null,"nullable":true,"pkey":false},"line_no":{"type":"smallint","pdo_type":1,"default": null,"nullable":true,"pkey":false},"file_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":错误的}}pkey":false},"create_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false},"log_ts":{"类型":"int","pdo_type":1,"default":null,"nullable":true,"pkey":false},"filename":{"type":"varchar","pdo_type":2 ,"default":null,"nullable":true,"pkey":false},"line_no":{"type":"smallint","pdo_type":1,"default":null,"nullable":true ,"pkey":false},"file_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false}}pkey":false},"create_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false},"log_ts":{"类型":"int","pdo_type":1,"default":null,"nullable":true,"pkey":false},"filename":{"type":"varchar","pdo_type":2 ,"default":null,"nullable":true,"pkey":false},"line_no":{"type":"smallint","pdo_type":1,"default":null,"nullable":true ,"pkey":false},"file_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false}}"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false},"log_ts":{"type":"int","pdo_type":1,"default ":null,"nullable":true,"pkey":false},"filename":{"type":"varchar","pdo_type":2,"default":null,"nullable":true,"pkey ":false},"line_no":{"type":"smallint","pdo_type":1,"default":null,"nullable":true,"pkey":false},"file_ts":{"type ":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false}}"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false},"log_ts":{"type":"int","pdo_type":1,"default ":null,"nullable":true,"pkey":false},"filename":{"type":"varchar","pdo_type":2,"default":null,"nullable":true,"pkey ":false},"line_no":{"type":"smallint","pdo_type":1,"default":null,"nullable":true,"pkey":false},"file_ts":{"type ":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false}}"log_ts":{"type":"int","pdo_type":1,"default":null,"nullable":true,"pkey":false},"filename":{"type":"varchar" ,"pdo_type":2,"default":null,"nullable":true,"pkey":false},"line_no":{"type":"smallint","pdo_type":1,"default":null ,"可为空":true,"pkey":false},"file_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false }}"log_ts":{"type":"int","pdo_type":1,"default":null,"nullable":true,"pkey":false},"filename":{"type":"varchar" ,"pdo_type":2,"default":null,"nullable":true,"pkey":false},"line_no":{"type":"smallint","pdo_type":1,"default":null ,"可为空":true,"pkey":false},"file_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false }}默认":null,"nullable":true,"pkey":false},"line_no":{"type":"smallint","pdo_type":1,"default":null,"nullable":true," pkey":false},"file_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false}}默认":null,"nullable":true,"pkey":false},"line_no":{"type":"smallint","pdo_type":1,"default":null,"nullable":true," pkey":false},"file_ts":{"type":"datetime","pdo_type":2,"default":null,"nullable":true,"pkey":false}}

如您所见, id 有一个 "pkey":true 条目,因此可以查看帖子中的字段,然后查看该字段并确定是否需要设置 IDENTITY_INSERT。也许我会实现这一点。我担心这超出了我的工资等级。

4

1 回答 1

0

更新到最新版本的 fatfree 修复了这个问题。

于 2017-04-14T20:04:02.767 回答