I’m getting InvalidArgumentException
Database connection [users] not configured.
http://127.0.0.1:8000/register error, when submitting register form, using Laravel Auth. My Laravel version is 6.17.1
.env file
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
Auth/RegisterController.php file
<?php namespace AppHttpControllersAuth; use AppHttpControllersController; use AppProvidersRouteServiceProvider; use AppUser; use IlluminateFoundationAuthRegistersUsers; use IlluminateSupportFacadesHash; use IlluminateSupportFacadesValidator; class RegisterController extends Controller { /* |-------------------------------------------------------------------------- | Register Controller |-------------------------------------------------------------------------- | | This controller handles the registration of new users as well as their | validation and creation. By default this controller uses a trait to | provide this functionality without requiring any additional code. | */ use RegistersUsers; /** * Where to redirect users after registration. * * @var string */ protected $redirectTo = RouteServiceProvider::HOME; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest'); } /** * Get a validator for an incoming registration request. * * @param array $data * @return IlluminateContractsValidationValidator */ protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:20'], 'surname' => ['required', 'string', 'max:30'], 'age' => ['required', 'integer', 'max:100'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users.email'], 'password' => ['required', 'string', 'min:6'], 'confirm' => ['required', 'string', 'same:password'] ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return AppUser */ protected function create(array $data) { date_default_timezone_set("Asia/Yerevan"); $created = date('Y-m-d H:i:s'); return User::create([ 'name' => $data['name'], 'surname'=> $data['surname'], 'age' => $data['age'], 'email' => $data['email'], 'password' => Hash::make($data['password']), 'created_at' => $created ]); } }
app/User.php file
<?php namespace App; use IlluminateContractsAuthMustVerifyEmail; use IlluminateFoundationAuthUser as Authenticatable; use IlluminateNotificationsNotifiable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'surname', 'age', 'email', 'password', 'code', 'ban', 'ban_reason', 'created_at', 'image', 'role', 'confirmed' ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'code', 'confirmed' ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', ]; }
users table migration file
<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name', 20); $table->string('surname', 30); $table->integer('age'); $table->string('image', 255); $table->string('email', 255); $table->string('password', 255); $table->integer('code')->default(0); $table->string('ban', 255); $table->string('ban_reason', 255); $table->string('role', 255)->default("user"); $table->boolean('confirmed')->default(false); $table->dateTime('created_at'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('users'); } }
config/database.php file
<?php use IlluminateSupportStr; return [ /* |-------------------------------------------------------------------------- | Default Database Connection Name |-------------------------------------------------------------------------- | | Here you may specify which of the database connections below you wish | to use as your default connection for all database work. Of course | you may use many connections at once using the Database library. | */ 'default' => env('DB_CONNECTION', 'mysql'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | | Here are each of the database connections setup for your application. | Of course, examples of configuring each database platform that is | supported by Laravel is shown below to make development simple. | | | All database work in Laravel is done through the PHP PDO facilities | so make sure you have the driver for your particular database of | choice installed on your machine before you begin development. | */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DATABASE_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'schema' => 'public', 'sslmode' => 'prefer', ], 'sqlsrv' => [ 'driver' => 'sqlsrv', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, ], ], /* |-------------------------------------------------------------------------- | Migration Repository Table |-------------------------------------------------------------------------- | | This table keeps track of all the migrations that have already run for | your application. Using this information, we can determine which of | the migrations on disk haven't actually been run in the database. | */ 'migrations' => 'migrations', /* |-------------------------------------------------------------------------- | Redis Databases |-------------------------------------------------------------------------- | | Redis is an open source, fast, and advanced key-value store that also | provides a richer body of commands than a typical key-value system | such as APC or Memcached. Laravel makes it easy to dig right in. | */ 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'), ], 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), ], 'cache' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), ], ], ];
auth.php file
<?php return [ /* |-------------------------------------------------------------------------- | Authentication Defaults |-------------------------------------------------------------------------- | | This option controls the default authentication "guard" and password | reset options for your application. You may change these defaults | as required, but they're a perfect start for most applications. | */ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], /* |-------------------------------------------------------------------------- | Authentication Guards |-------------------------------------------------------------------------- | | Next, you may define every authentication guard for your application. | Of course, a great default configuration has been defined for you | here which uses session storage and the Eloquent user provider. | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | Supported: "session", "token" | */ 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], ], /* |-------------------------------------------------------------------------- | User Providers |-------------------------------------------------------------------------- | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | If you have multiple user tables or models you may configure multiple | sources which represent each model / table. These sources may then | be assigned to any extra authentication guards you have defined. | | Supported: "database", "eloquent" | */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => AppUser::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ], /* |-------------------------------------------------------------------------- | Resetting Passwords |-------------------------------------------------------------------------- | | You may specify multiple password reset configurations if you have more | than one user table or model in the application and you want to have | separate password reset settings based on the specific user types. | | The expire time is the number of minutes that the reset token should be | considered valid. This security feature keeps tokens short-lived so | they have less time to be guessed. You may change this as needed. | */ 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], ], /* |-------------------------------------------------------------------------- | Password Confirmation Timeout |-------------------------------------------------------------------------- | | Here you may define the amount of seconds before a password confirmation | times out and the user is prompted to re-enter their password via the | confirmation screen. By default, the timeout lasts for three hours. | */ 'password_timeout' => 10800, ];
I have tried change .env file, clear cache and config, but no result.
UPD1: dd(config(‘database’));
array:4 [▼ "default" => "mysql" "connections" => array:4 [▼ "sqlite" => array:5 [▶] "mysql" => array:15 [▼ "driver" => "mysql" "url" => null "host" => "127.0.0.1" "port" => "3306" "database" => "geeknews" "username" => "root" "password" => "" "unix_socket" => "" "charset" => "utf8mb4" "collation" => "utf8mb4_unicode_ci" "prefix" => "" "prefix_indexes" => true "strict" => true "engine" => null "options" => [] ] "pgsql" => array:12 [▶] "sqlsrv" => array:10 [▶] ] "migrations" => "migrations" "redis" => array:4 [▶] ]
Advertisement
Answer
I had same error and it occurred because of wrong validation role.
i got this error :
{ "message": "Database connection [users] not configured.", "exception": "InvalidArgumentException", ... }
Check your validation rules again especially on [unique] rules.
My Wrong code :
$rules = [ 'username' => 'required|min:8|unique:users.username,'.$request->input('user-id') ];
And right ones :
$rules = [ 'username' => 'required|min:8|unique:users,username,'.$request->input('user-id') ];
You have same problem in ‘Auth/RegisterController.php’: replace this :
protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:20'], 'surname' => ['required', 'string', 'max:30'], 'age' => ['required', 'integer', 'max:100'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users.email'], 'password' => ['required', 'string', 'min:6'], 'confirm' => ['required', 'string', 'same:password'] ]); }
with this :
protected function validator(array $data) { return Validator::make($data, [ 'name' => ['required', 'string', 'max:20'], 'surname' => ['required', 'string', 'max:30'], 'age' => ['required', 'integer', 'max:100'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'string', 'min:6'], 'confirm' => ['required', 'string', 'same:password'] ]); }