Add the following insertIgnore method to your model
<?php namespace App; use Illuminate\Auth\Authenticatable; use Illuminate\Database\Eloquent\Model; use Illuminate\Auth\Passwords\CanResetPassword; use Illuminate\Foundation\Auth\Access\Authorizable; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract { use Authenticatable, Authorizable, CanResetPassword; protected $table = 'users'; protected $fillable = ['name', 'email', 'password']; protected $hidden = ['password', 'remember_token']; public static function insertIgnore(array $attributes = []) { $model = new static($attributes); if ($model->usesTimestamps()) { $model->updateTimestamps(); } $attributes = $model->getAttributes(); $query = $model->newBaseQueryBuilder(); $processor = $query->getProcessor(); $grammar = $query->getGrammar(); $table = $grammar->wrapTable($model->getTable()); $keyName = $model->getKeyName(); $columns = $grammar->columnize(array_keys($attributes)); $values = $grammar->parameterize($attributes); $sql = "insert ignore into {$table} ({$columns}) values ({$values})"; $id = $processor->processInsertGetId($query, $sql, array_values($attributes)); $model->setAttribute($keyName, $id); return $model; } }
You can use:
App\User::insertIgnore([ 'name' => 'Marco Pedraza', 'email' => ' mpdrza@gmail.com ' ]);
The following request will be executed:
insert ignore into `users` (`name`, `email`, `updated_at`, `created_at`) values (?, ?, ?, ?)
This method automatically adds / removes the “Eloquent” timestamps if you enable or disable it.
source share