Dom*_*Dom 18 mysql laravel laravel-4 laravel-seeding
我正在使用Laravel(4.2)
我正在开发一个带有身份验证系统的项目.我需要将第一个用户插入到我的users表中.我想直接使用sql命令(插入用户....).因为无法使用传统的laravel方法创建第一个用户.
在插入表格后,第一个用户将使用auth :: attempts方法进行识别.
如何将此用户插入mysql表?
就像是?
insert into users (login, password) values ('admin', 'crypted password which can be later identified with laravel')
Run Code Online (Sandbox Code Playgroud)
Ang*_* M. 44
我是这样做的:
用工匠创造播种机:
php artisan make:seeder UsersTableSeeder
Run Code Online (Sandbox Code Playgroud)
然后你打开文件然后输入用户:
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => 'User1',
'email' => 'user1@email.com',
'password' => bcrypt('password'),
]);
DB::table('users')->insert([
'name' => 'user2',
'email' => 'user2@email.com',
'password' => bcrypt('password'),
]);
}
}
Run Code Online (Sandbox Code Playgroud)
如果要生成随机用户列表,可以使用工厂:
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,
]);
});*/
}
}
Run Code Online (Sandbox Code Playgroud)
然后在文件app/database/seeds/DatabaseSeeder.php中取消注释或在run函数中添加一行:
$this->call(UsersTableSeeder::class);
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class);
}
}
Run Code Online (Sandbox Code Playgroud)
最后你运行:
php artisan db:seed
Run Code Online (Sandbox Code Playgroud)
要么
php artisan db:seed --class=UsersTableSeeder
Run Code Online (Sandbox Code Playgroud)
我希望能帮助别人.PS:这是在Laravel 5.3上完成的
如果您担心将文本格式的用户密码不安全地保存到存储库或服务器,我建议您创建一个命令来为您创建用户.
请参阅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");
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以从服务器运行命令,并且您没有以基于文本的格式存储任何内容!
将所需的值放在.env文件中。
INITIAL_USER_PASSWORDHASH是bcrypt,必须由用户以某种方式生成。
您的应用程序应该提供一种简单的方法。
您不想在该文件中保存明文pws。
否则,您首先要取消将其保存在数据库的bcrypt中。
INITIAL_USER_NAME=
INITIAL_USER_EMAIL=
INITIAL_USER_PASSWORDHASH=
Run Code Online (Sandbox Code Playgroud)
然后,按照其他答案的建议,在使用播种机之前:
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'),
]);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您应该在文件database / seeds / DatabaseSeeder.php中输入种子,以便在每次完整种子运行中都调用它:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class
]);
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
composer dump-autoload
最后是一个手动种子调用:
php artisan db:seed
在网站上找到解决方案
http://connectonline.in/add-new-user-to-laravel-database/
请检查上面的网址,
使用php artisan tinker工具,我们可以将新用户直接添加到数据库.
$user = new App\User();
$user->password = Hash::make('password here ');
$user->email = 'proposed email@addresss.com';
$user->save();
Run Code Online (Sandbox Code Playgroud)
最合理的方法是使用 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')));
}
}
Run Code Online (Sandbox Code Playgroud)
创建这样的播种器后,php artisan migrate您可以运行php artisan db:seed并创建您的第一个用户