【问题标题】:PostgreSQL Laravel not return idPostgreSQL Laravel 不返回 id
【发布时间】:2023-04-05 20:44:02
【问题描述】:

我正在使用 Laravel Query Builder 和 insertGetId 方法。

带触发器的迁移。触发器为每个用户创建新表。

public function up()
{
    Schema::create('links_group', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('users_id');
        $table->string('name');
        $table->timestamps();
        $table->softDeletes();
    });

    DB::statement("CREATE OR REPLACE FUNCTION links_group_triger() RETURNS trigger AS 
  $BODY$
DECLARE
    temp_users_id INTEGER;
    tablenew TEXT;
BEGIN
    temp_users_id := NEW.users_id;
    tablenew := 'links_group_' || NEW.users_id;
IF NOT EXISTS( SELECT * FROM links_group WHERE users_id = temp_users_id ) THEN
    EXECUTE 'CREATE TABLE ' || tablenew || ' ( id SERIAL, PRIMARY KEY (id) ,
CHECK ( users_id = ' || temp_users_id || '  ) ) INHERITS (links_group)';
END IF;
    EXECUTE 'INSERT INTO ' || tablenew || ' SELECT(' || TG_RELNAME || ' ' || quote_literal(NEW) || ').* RETURNING id;';
RETURN NULL;
END;
 $BODY$
LANGUAGE plpgsql;");

    DB::statement("CREATE TRIGGER links_group_triger 
BEFORE INSERT ON links_group 
FOR EACH ROW EXECUTE PROCEDURE links_group_triger();");

}

我的问题是使用 insertGetId 数据插入但 ID 不返回。

$id_group = DB::table('links_group')->insertGetId($form);

Laravel 抛出错误: PostgresProcessor.php 第 20 行中的 ErrorException: 未定义的偏移量:0

【问题讨论】:

标签: php postgresql laravel laravel-query-builder


【解决方案1】:

问题在于触发器中的“返回 null”。如果我改为'return new',我有两个相同的插入。我用代码解决了这个问题

DB::table('links_group')->insert($form);
$id_links = DB::select("SELECT currval('links_group_id_seq');")[0]->currval;

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 2013-10-10
    • 2013-05-11
    相关资源
    最近更新 更多