2014-01-27 3 views
0

В существующем сообщении (ссылка ниже) Я уже знаю, как вставить строку в таблицу с одним столбцом идентификации для Microsoft SQL Server.Использование CakePHP для вставки строк в таблицу только с одним столбцом IDENTITY

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

Это похоже на правильный способ сохранения в CakePHP, хотя я не вижу, что вы сохраняете. Вы ничего не передаете в свой метод/действие сохранения, например '$ this-> MyModel-> save ($ this-> request-> data);'. То есть, если данные передаются в модель таким образом. –

+0

Что такое схема MyModel? это зависит от этой схемы. – Anubhav

+0

@ AKKA-Web Спасибо. на самом деле единственными данными для сохранения является значение для столбца идентификации, который я хочу, чтобы он был автоматически назначен базой данных. Вы можете проверить схему таблиц выше в моем отредактированном сообщении выше. – VCD

ответ

0

Для демонстрационных целей текущая модель записывается как «__THE_CURRENT_MODEL__», которая, конечно же, не надлежащего CakePHP название модели. Duh!

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 .. что привело бы не запроса вообще - столбец идентификатора является числового.

+0

У меня больше нет доступа к среде, и я слишком ленив, чтобы настроить его с нуля, чтобы проверить его. Во всяком случае, я по-прежнему буду отмечать это как ответ. – VCD

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();