在现有帖子(下面的链接)中,我已经知道如何在具有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
)
答案 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列 数字。