The following methods to control the `IDENTITY_INSERT` to ON/OFF for SQL table seeding process in PHP (Laravel) :
Note: Generally, the table requires to have an auto-increment primary key to set Identity Insert to `ON`, that's why I have the `$hasAutoIncrementPrimaryKey` flag. Otherwise, seeding may throw an error as:
function setIdentityInsert($table, $onStatus = true) { $status = $onStatus ? 'ON' : 'OFF'; $this->sqlConnection->unprepared("SET IDENTITY_INSERT $table $status"); } function insertTableData($table, $data) { return $this->sqlConnection->table($table)->insert($data); } function seedTable($table, $hasAutoIncrementPrimaryKey = false, $data = []) { if ($hasAutoIncrementPrimaryKey) { $this->setIdentityInsert($table); $response = $this->insertTableData($table, $data); $this->setIdentityInsert($table, false); return $response; } else { return $this->insertTableData($table, $data); } }
Note: Generally, the table requires to have an auto-increment primary key to set Identity Insert to `ON`, that's why I have the `$hasAutoIncrementPrimaryKey` flag. Otherwise, seeding may throw an error as:
SQLSTATE[HY000]: General error: 544 Cannot insert explicit value for identity column in table 'test_table_name' when IDENTITY_INSERT is set to OFF. [544] (severity 16) [(null)]Hope this helps!
No comments:
Post a Comment
Please post any queries and comments here.