Sql 使用CakePHP将行插入到只有一个标识列的表中

Sql 使用CakePHP将行插入到只有一个标识列的表中,sql,sql-server,tsql,cakephp,cakephp-2.4,Sql,Sql Server,Tsql,Cakephp,Cakephp 2.4,在下面的一个已有的post链接中,我已经知道如何在一个表中插入一行,其中包含一个Microsoft SQL Server的标识列 $sql = 'INSERT INTO ' . $this -> MyModel -> table . ' OUTPUT INSERTED.' . $this -> MyModel -> primaryKey . ' DEFAULT VALUES;'; $dbh = $this -> MyModel -> getDataSource

在下面的一个已有的post链接中,我已经知道如何在一个表中插入一行,其中包含一个Microsoft SQL Server的标识列

$sql = 'INSERT INTO ' . $this -> MyModel -> table . ' OUTPUT INSERTED.' . $this -> MyModel -> primaryKey . ' DEFAULT VALUES;';
$dbh = $this -> MyModel -> getDataSource() -> getConnection();
$stmt = $dbh -> prepare($sql);
$stmt -> execute();
$sqlResult = $stmt -> fetch(PDO::FETCH_NUM);
$stmt -> closeCursor();
现在我想用CakePHP做同样的事情。但是,当我尝试以下操作时,记录将不会保存

$this -> MyModel -> create();
if ($this -> MyModel -> save()) {
    $this -> log('Record is saved', 'debug');
} else {
    // Always run the following
    $this -> log('Record is not saved', 'debug');
}
CakePHP如何将此类记录保存到表中

MyModel的表架构如下所示:

CREATE TABLE [dbo].[my_models] (
    [id] INT NOT NULL PRIMARY KEY IDENTITY
)

这就是我在代码中的结局。除了已创建的行之外,还将检索标识列的生成值。我更喜欢使用$this->MyModel->save;但由于我不知道如何做,我只能使用直接SQL执行来归档结果

如果有人能建议一种方法来回答我的问题$this->MyModel->save;,我很乐意将此作为答案

注意:SQL可能无法在某些旧版本的MS SQL Server上运行

$sql = 'INSERT INTO ' . $this -> MyModel -> table . ' OUTPUT INSERTED.' . $this -> MyModel -> primaryKey . ' DEFAULT VALUES;';
$dbh = $this -> MyModel -> getDataSource() -> getConnection();
$stmt = $dbh -> prepare($sql);
$stmt -> execute();
$sqlResult = $stmt -> fetch(PDO::FETCH_NUM);
$stmt -> closeCursor();

出于演示目的,当前模型被写为“u_当前_模型”,这当然不是一个正确的CakePHP模型名称。哼


正如您应该注意的那样,“NULL”值不是NULL。。这将导致根本没有查询-id列是数字。

这似乎是在CakePHP中保存的正确方法,尽管我看不出您正在保存什么。您没有向保存方法/操作传递任何内容,例如$this->MyModel->save$this->request->data;。也就是说,如果数据以这种方式传递给模型,那么MyModel的模式是什么?这取决于该模式。@AKKA Web谢谢。实际上,唯一要保存的数据是identity列的值,我希望它由数据库自动分配。您可以在上面我编辑的帖子中查看上面的表格模式。@Anubhav谢谢提醒。我已经在上面编辑的文章中包含了该架构。将[id]列的属性更改为[id]INT NOT NULL PRIMARY KEY UNIQUE AUTO_INCREMENT,您的代码是正确的。我不再有权访问该环境,而且我太懒了,无法从头开始设置一个来测试它。无论如何,我还是会把这个标记为答案。