2017-01-04 2 views
1

Я использую Laravel Query Builder с методом insertGetId.PostgreSQL Laravel not return id

Миграция с триггером. Триггер создает новую таблицу для каждого пользователя.

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 ошибка броска: ErrorException в PostgresProcessor.php строке 20: Undefined смещение: 0

+0

Можете ли вы опубликовать код в своем PostgresProcessor.php? – shalvah

+0

так же, как этот https://github.com/laravel/framework/blob/master/src/Illuminate/Database/Query/Processors/PostgresProcessor.php – Laky

ответ

0

Проблема с 'вернуть нуль' в триггере. Если я перейду на «возврат нового», у меня будет две одинаковые вставки. Я исправлю это кодом

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