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.