2015-12-07 30 views
3

充滿我已經在過去蛋糕1 & 2的工作,我第一次使用CakePHP 3.CakePHP的3 - 保存實體ID /創建/修改不使用SQLite

我試圖相當做些什麼簡單地說,連接到一個sqlite數據庫並創建一條記錄。

我想要id,創建和修改字段自動填寫。 這可能是因爲我使用sqlite和表定義是錯誤的,通常我使用mysql或postgres。

我的表:

CREATE TABLE account (
    id  CHAR (36) PRIMARY KEY, 
    username TEXT  UNIQUE, 
    password TEXT  NOT NULL, 
    created INTEGER, 
    modified INTEGER 
); 

而且我在做什麼將數據保存在它:

$account = new Account([ 
    'username' => $username, 
    'password' => $password 
]); 
TableRegistry::get('Account')->save($account); 

我一直在閱讀文檔和id的一個char(36)應該有做了這樣的工作,就像它在這裏提到的: http://book.cakephp.org/3.0/en/intro/conventions.html#model-and-database-conventions

回答

2

createdmodified字段只填寫時使用Timestamp行爲,所以請確保您使用它。

此外,爲了CakePHP能夠正確處理時間字段,您應該使用更具體的日期/時間類型,如DATETIME。儘管如此,SQLite將內部將它們視爲數字列,但CakePHP需要這些類型才能將值映射到正確的數據庫類型類。

至於你id欄中移除CHAR(36)之間的空白,SQLite的將與空白,CHAR (36)返回類型定義,即和CakePHP正在尋找CHAR(36),無空白。

https://github.com/cakephp/.../blob/3.1.5/src/Database/Schema/SqliteSchema.php#L47

參見

+0

確實是這種情況,使用GUI也被生成的表創建SQL l,時間戳開始工作,並且我添加了行爲並將時間戳用作類型。 – Crazy

+0

我有使用CakePHP 3.4的相同問題。我解決了在我的模型/表中使用這個: public function initialize(array $ config) {this-> addBehavior('Timestamp'); } 更多的信息在這裏:https://book.cakephp.org/3.0/en/tutorials-and-examples/blog/part-two.html –

相關問題