首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP Phalcon。在模型中使用postgres nextval(序列)

PHP Phalcon。在模型中使用postgres nextval(序列)
EN

Stack Overflow用户
提问于 2019-09-04 23:42:56
回答 2查看 228关注 0票数 1

我在Postgres中有一个带有DDL的表,如下所示:

代码语言:javascript
运行
复制
CREATE TABLE robots(
    robot_id INTEGER NOT NULL CONSTRAINT robot_id_pkey PRIMARY KEY,
    name TEXT
);

我知道我可以用下面的SQL语句插入一条记录:

代码语言:javascript
运行
复制
INSERT INTO robots (robot_id, name) VALUES (nextval('robots_seq'), 'WALL-E');

我需要在Phalcon中对这个表进行CRUD操作。此外,我还想使用ORM特性。

所以我这么做了:

代码语言:javascript
运行
复制
$robot = new Robots();
$robot->setRobotId(new \Phalcon\Db\RawValue("nextval('robots_seq')"));
$robot->setName('WALL-E');
$robot->save();

并获得以下异常:

代码语言:javascript
运行
复制
Uncaught PDOException: SQLSTATE[22P02]: Invalid text representation:
7 ERROR: invalid input syntax for integer: 'nextval('robots_seq')';

有什么方法可以做到这一点吗?

EN

Stack Overflow用户

发布于 2019-10-23 03:31:03

Phalcon假设您的具有串行(自动递增)列的模型将具有名为table_name_column_name_seq的序列。

在您的例子中,为了让Phalcon负责处理自动增量列,您应该有一个名为robots_robot_id_seq的序列,而不是列robot_id的robots_seq (顺便说一句,我称之为"id“)。

这样,你就不必担心在创建对象时设置id,保存后Phalcon将自动为你填充该字段:

代码语言:javascript
运行
复制
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

希望能有所帮助。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57791820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档