Halu_wimps
@Halu_wimps (シガラキ)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravel/SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entryのエラーについて

解決したいこと

上記サイトを見ながら管理画面を作っているのですが、
Seederを使ってテストユーザーの登録を行おうとComposerでしたところphp artisan db:seedを入力したところ、下のエラーが発生しました。
ネットで検索しても改善できなかったためご指摘やご教授を頂けたら幸いです!!

発生している問題・エラー

 INFO  Seeding database.

  Database\Seeders\UsersTableSeeder ............................... RUNNING

   Illuminate\Database\QueryException

  SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'test_user1' for key 'users_screen_name_unique' (SQL: insert into `users` (`screen_name`, `name`, `profile_image`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) values (test_user1, TEST1, https://placehold.jp/50x50.png, test1@test.com, $2y$10$xo8wYONjaijjsJcM88.ARee5.y6FAfPRsHNzWdzWleygqb4a9fK5W, MmpbcfAf5p, 2022-10-19 18:55:15, 2022-10-19 18:55:15))

  at C:\xampp\htdocs\sns\vendor\laravel\framework\src\Illuminate\Database\Connection.php:759
    755▕         // If an exception occurs when attempting to run a query, we'll format the error
    756▕         // message to include the bindings with SQL, which will make this exception a
    757▕         // lot more helpful to the developer instead of just the database's errors.
    758▕         catch (Exception $e) {
  ➜ 759▕             throw new QueryException(
    760▕                 $query, $this->prepareBindings($bindings), $e
    761▕             );
    762▕         }
    763▕     }

  1   C:\xampp\htdocs\sns\vendor\laravel\framework\src\Illuminate\Database\Connection.php:544
      PDOException::("SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'test_user1' for key 'users_screen_name_unique'")

  2   C:\xampp\htdocs\sns\vendor\laravel\framework\src\Illuminate\Database\Connection.php:544
      PDOStatement::execute()

Seeders

DatabaseSeeder.php
namespace Database\Seeders;

// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
      $this->call([
          UsersTableSeeder::class,
          TweetsTableSeeder::class,
          CommentsTableSeeder::class,
          FavoritesTableSeeder::class,
          FollowersTableSeeder::class,
          AdminUserSeeder::class
      ]);
    }
}

AdminUserSeede

AdminUserSeede.php
namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\AdminUser;
use Illuminate\Support\Facades\Hash;

class AdminUserSeeder extends Seeder
{
    public function run()
    {
        // テストユーザーの登録
        $param = [
            'name' => 'admin',
            'email' => 'example@test.com',
            'password' => Hash::make('password'),
        ];
        $adminUser = new AdminUser;
        $adminUser->fill($param)->save();
    }
}

正直なところまだ勉強中で知識がまだまだない状態でネットを見ても解決策が見つけられなかったため、是非ご指摘ご教授をいただきたいです!!

0

2Answer

usersテーブルのscreen_nameカラムに同じ値('test_user1')を入れようとしてエラーを吐いています。

AdminUserSeederではなく、
UsersTableSeederクラスの処理内で重複して'test_user1'をscreen_nameに登録しようとしていないか確認してみてください。

0Like

Comments

  1. @Halu_wimps

    Questioner

    コメントありがとうございます!!
    一度UserTableで先にテストアカウントを作っていたからもう一度seeder実行しようとして重複していたみたいです!
    AdminUser単体で行ったら無事に反映できました!!

    ご指摘をいただきありがとうございます!

多分usersテーブルのscreen_nameにユニークキーが貼られていて、
重複しているscreen_nameをinsertしようとしているっぽいです

usersテーブルへのインサート処理(= Usersモデル?のインスタンスへのsaveメソッド)が行われている箇所を確認してみてはどうでしょうか?

0Like

Comments

  1. @Halu_wimps

    Questioner

    確認してみますありがとうございます!!!

Your answer might help someone💌