Laravel: Как вставить первого пользователя в базу данных?
Я использую Laravel (4.2)
Я работаю над проектом с системой аутентификации. Мне нужно вставить первого пользователя в таблицу моих пользователей. Я хотел бы сделать это непосредственно с помощью команды sql (вставить в пользователей...). Потому что этот первый пользователь не может быть создан с помощью традиционных методов laravel.
Этот первый пользователь будет идентифицирован с помощью метода auth :: попытки, после того, как он будет вставлен в таблицу.
Как вставить этого пользователя в таблицу mysql?
что-то вроде?
insert into users (login, password) values ('admin', 'crypted password which can be later identified with laravel')
Ответы
Ответ 1
Я делаю это так:
создание сеялки с мастером:
php artisan make:seeder UsersTableSeeder
то вы открываете файл и вводите пользователей:
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => 'User1',
'email' => '[email protected]',
'password' => bcrypt('password'),
]);
DB::table('users')->insert([
'name' => 'user2',
'email' => '[email protected]',
'password' => bcrypt('password'),
]);
}
}
Если вы хотите создать случайный список пользователей, вы можете использовать заводы:
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\User::class, 50)->create();
/* or you can add also another table that is dependent on user_id:*/
/*factory(App\User::class, 50)->create()->each(function($u) {
$userId = $u->id;
DB::table('posts')->insert([
'body' => str_random(100),
'user_id' => $userId,
]);
});*/
}
}
Затем в файле app/database/seed/DatabaseSeeder.php раскомментируйте или добавьте в функцию запуска строку:
$this->call(UsersTableSeeder::class);
это будет выглядеть так:
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class);
}
}
В конце вы запускаете:
php artisan db:seed
или
php artisan db:seed --class=UsersTableSeeder
Надеюсь, кто-то поможет. PS: это было сделано на Laravel 5.3
Ответ 2
Для пароля откройте терминал в корне вашего проекта. Затем напишите php artisan tinker
. Затем echo Hash::make('password');
Ответ 3
Найти решение на сайте
http://connectonline.in/add-new-user-to-laravel-database/
Пожалуйста, проверьте выше URL,
Используя инструмент php artisan tinker, мы можем добавить нового пользователя непосредственно в базу данных.
$user = new App\User();
$user->password = Hash::make('password here ');
$user->email = 'proposed [email protected]';
$user->save();
Ответ 4
Если вас беспокоит небезопасное сохранение пароля пользователя в текстовом формате в хранилище или на вашем сервере, я предлагаю создать команду для создания пользователей для вас.
См. Документы Laravel: https://laravel.com/docs/5.6/artisan#generating-commands
В методе handle добавьте что-то вроде этого:
public function handle()
{
$first_name = $this->ask('What is the first name?');
$last_name = $this->ask('What is the last name?');
$email = $this->ask('What is the email address?');
$password = $this->secret('What is the password?');
AdminUser::create([
'first_name' => $first_name,
'last_name' => $last_name,
'email' => $email,
'password' => bcrypt($password)
]);
$this->info("User $first_name $last_name was created");
}
Затем вы можете запустить команду с сервера, и вы ничего не сохранили в текстовом формате!
Ответ 5
Поместите необходимые значения в файл .env.
INITIAL_USER_PASSWORDHASH является bcrypt и должен каким-то образом генерироваться пользователями.
Ваше приложение должно предоставить простой способ.
Вы не хотите сохранять текстовые файлы в этом файле.
В противном случае вы бы аннулировали сохранение его в bcrypt в базе данных.
INITIAL_USER_NAME=
INITIAL_USER_EMAIL=
INITIAL_USER_PASSWORDHASH=
Затем, как предлагается в других ответах, перед использованием сеялки:
php artisan make:seeder UsersTableSeeder
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => env('INITIAL_USER_NAME'),
'email' => env('INITIAL_USER_EMAIL'),
'password' => env('INITIAL_USER_PASSWORDHASH'),
]);
}
}
Затем вы должны ввести seed в файл database/seed/DatabaseSeeder.php, чтобы он вызывался при каждом полном запуске seed:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class
]);
}
}
Затем:
composer dump-autoload
И, наконец, для одного ручного вызова семян:
php artisan db:seed
Ответ 6
Наиболее разумным способом является использование DatabaseSeeder для такого действия.
Я буду использовать пример непосредственно из документации:
class DatabaseSeeder extends Seeder {
public function run()
{
$this->call('UserTableSeeder');
$this->command->info('User table seeded!');
}
}
class UserTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
User::create(array('login' => 'admin', 'password' => Hash::make('secret')));
}
}
После создания такой сеялки после php artisan migrate
вы можете запустить php artisan db:seed
и ваш 1-й пользователь будет создан
Ссылка: Поселение базы данных в Laravel
Ответ 7
В Laravel 5.6.39 я делаю следующее:
$user = new App\User();
$user->name = 'dhrubo'; //write whatever name you want
$user->password = Hash::make('dhrubo'); // write the password you want
$user->email = '[email protected]'; // write the email you want
$user->save();