2017-01-04 4 views
1

私はLaravel Query BuilderをinsertGetIdメソッドで使用しています。PostgreSQL Laravel not 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スローエラー:PostgresProcessor.phpライン20で ErrorException: 未定義のオフセット:0

+0

PostgresProcessor.phpにコードを投稿できますか? – shalvah

+0

と同じhttps://github.com/laravel/framework/blob/master/src/Illuminate/Database/Query/Processors/PostgresProcessor.php – Laky

答えて

0

問題が引き金に 'nullを返し' です。私が「新しいものを返す」に変更した場合、私は2つの同じインサートを持っています。私はコードでこれを修正します

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