使用CakePHP将行插入到仅包含一个IDENTITY列的表中

时间:2014-01-27 04:32:33

标签: sql sql-server tsql cakephp cakephp-2.4

在现有帖子(下面的链接)中,我已经知道如何在具有Microsoft SQL Server的一个标识列的表中插入行。

Inserting rows into a table with one IDENTITY column only

现在我想用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
)

2 个答案:

答案 0 :(得分:0)

这就是我在代码中的结果。除了创建的行之外,还会检索标识列的生成值。我更喜欢使用$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();

答案 1 :(得分:0)

出于演示目的,当前模型被写为'__THE_CURRENT_MODEL__',当然,是正确的CakePHP模型名称。 咄!

    public function add() {
        if( $this->request->is('post') ){
            $this->__THE_CURRENT_MODEL__->create();
            if( $this->__THE_CURRENT_MODEL__->save(
                array(
                    '__THE_CURRENT_MODEL__' => array( 'id' => 'NULL' )
                )
            ) ){
                $this->Flash->success(__('The __current_model__ has been saved.'));
                return $this->redirect( array( 'action' => 'index' ) );
            }else{
                $this->Flash->error(__('The __current_model__ could not be saved. Please, try again.'));
            }
        }
    }

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