diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index c994a546381a..1c28b74f2546 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -2648,7 +2648,7 @@ public function insert(array $values) } /** - * Insert ignore a new record into the database. + * Insert a new record into the database while ignoring errors. * * @param array $values * @return int diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index 973a3c6aeab6..0d8241fc3deb 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -881,7 +881,7 @@ public function compileInsert(Builder $query, array $values) */ public function compileInsertOrIgnore(Builder $query, array $values) { - throw new RuntimeException('This database engine does not support insert or ignore.'); + throw new RuntimeException('This database engine does not support inserting while ignoring errors.'); } /** diff --git a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php index b369ea1831f4..3b6462a61214 100755 --- a/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/MySqlGrammar.php @@ -2,6 +2,7 @@ namespace Illuminate\Database\Query\Grammars; +use Illuminate\Support\Str; use Illuminate\Database\Query\Builder; use Illuminate\Database\Query\JsonExpression; @@ -63,7 +64,7 @@ public function compileSelect(Builder $query) */ public function compileInsertOrIgnore(Builder $query, array $values) { - return substr_replace($this->compileInsert($query, $values), ' ignore', 6, 0); + return Str::replaceFirst('insert', 'insert ignore', $this->compileInsert($query, $values)); } /** diff --git a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php index 4f593a232820..839d6e5b1cc3 100755 --- a/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/PostgresGrammar.php @@ -217,11 +217,7 @@ public function compileInsertOrIgnore(Builder $query, array $values) */ public function compileInsertGetId(Builder $query, $values, $sequence) { - if (is_null($sequence)) { - $sequence = 'id'; - } - - return $this->compileInsert($query, $values).' returning '.$this->wrap($sequence); + return $this->compileInsert($query, $values).' returning '.$this->wrap($sequence ?: 'id'); } /** diff --git a/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php b/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php index 6e7a95147a99..a6782138e2b1 100755 --- a/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php +++ b/src/Illuminate/Database/Query/Grammars/SQLiteGrammar.php @@ -187,7 +187,7 @@ public function compileInsert(Builder $query, array $values) */ public function compileInsertOrIgnore(Builder $query, array $values) { - return substr_replace($this->compileInsert($query, $values), ' or ignore', 6, 0); + return Str::replaceFirst('insert', 'insert or ignore', $this->compileInsert($query, $values)); } /** diff --git a/tests/Database/DatabaseQueryBuilderTest.php b/tests/Database/DatabaseQueryBuilderTest.php index 826022b920c4..88f7e7c35100 100755 --- a/tests/Database/DatabaseQueryBuilderTest.php +++ b/tests/Database/DatabaseQueryBuilderTest.php @@ -1870,7 +1870,7 @@ function (Builder $query) { public function testInsertOrIgnoreMethod() { $this->expectException(RuntimeException::class); - $this->expectExceptionMessage('This database engine does not support insert or ignore.'); + $this->expectExceptionMessage('does not support'); $builder = $this->getBuilder(); $builder->from('users')->insertOrIgnore(['email' => 'foo']); } @@ -1902,7 +1902,7 @@ public function testSQLiteInsertOrIgnoreMethod() public function testSqlServerInsertOrIgnoreMethod() { $this->expectException(RuntimeException::class); - $this->expectExceptionMessage('This database engine does not support insert or ignore.'); + $this->expectExceptionMessage('does not support'); $builder = $this->getSqlServerBuilder(); $builder->from('users')->insertOrIgnore(['email' => 'foo']); }