我在Postgres中有一个带有DDL的表,如下所示:
CREATE TABLE robots(
    robot_id INTEGER NOT NULL CONSTRAINT robot_id_pkey PRIMARY KEY,
    name TEXT
);我知道我可以用下面的SQL语句插入一条记录:
INSERT INTO robots (robot_id, name) VALUES (nextval('robots_seq'), 'WALL-E');我需要在Phalcon中对这个表进行CRUD操作。此外,我还想使用ORM特性。
所以我这么做了:
$robot = new Robots();
$robot->setRobotId(new \Phalcon\Db\RawValue("nextval('robots_seq')"));
$robot->setName('WALL-E');
$robot->save();并获得以下异常:
Uncaught PDOException: SQLSTATE[22P02]: Invalid text representation:
7 ERROR: invalid input syntax for integer: 'nextval('robots_seq')';有什么方法可以做到这一点吗?
发布于 2019-10-23 03:31:03
Phalcon假设您的具有串行(自动递增)列的模型将具有名为table_name_column_name_seq的序列。
在您的例子中,为了让Phalcon负责处理自动增量列,您应该有一个名为robots_robot_id_seq的序列,而不是列robot_id的robots_seq (顺便说一句,我称之为"id“)。
这样,你就不必担心在创建对象时设置id,保存后Phalcon将自动为你填充该字段:
CREATE TABLE robots(
robot_id SERIAL PRIMARY KEY NOT NULL,
name TEXT
);
$robot = new Robots();
$robot->setName('WALL-E');
$robot->save();
$robot->getRobotId(); // Should return last "nextval()" sequence希望能有所帮助。
https://stackoverflow.com/questions/57791820
复制相似问题