くずきのblog

技術とか色々

LaravelでRedshiftにインサートする際にでるSQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "returning"の対処法

どうも、くずきです。
以前、LaravelRedshiftを扱う方法について書きました。

kzkohashi.hatenablog.com

今回は、Redshiftにインサートする際にでる

SQLSTATE[42601]: Syntax error: 7 ERROR:  syntax error at or near "returning"

の対処法について。

EloquentとRedshiftを紐づける

以前の記事ではコードかかなかったけど、Eloquentにはモデルごとにコネクションを変えることができる。

class User extends Model
{

   protected $connection = 'redshift';
   
   protected $table = 'users';
   
}

$connectionに該当する接続先を定義してあげれば良い。

Redshiftにインサートする

冒頭に述べたように、EloquentではRedshiftに接続した際に、そのままインサートするとエラーがでる。

User::create(...)

上記のようにcreateする場合、Eloquentではデフォルトで、最後にインサートしたidを返すクエリーを投げている。

SQL: insert into "user" ("user_id", "updated_at", "created_at") values (335767, 2017-12-28 15:54:04, 2017-12-28 15:54:04) returning "id"

returning idがその部分だ。
これの解消方法は簡単で、

class User extends Model
{
  // 2つ追加
  protected $primaryKey = null;
  public $incrementing = false;

  protected $connection = 'redshift';
   
  protected $table = 'users';
   
}

primaryKeynullにし、incrementingfalseにしてauto incrementの設定をオフにすれば良い。