2015-12-07 80 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 –

相关问题