Laravel:如何在数据库中插入第一个用户

时间:2015-12-20 14:31:21

标签: 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')

7 个答案:

答案 0 :(得分:35)

我这样做:

用工匠创造播种机:

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' => 'user1@email.com',
            'password' => bcrypt('password'),
        ]);
        DB::table('users')->insert([
            'name' => 'user2',
            'email' => 'user2@email.com',
            '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 / seeds / DatabaseSeeder.php文件中取消注释或在run函数中添加一行:

$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上完成的

答案 1 :(得分:7)

对于密码,请打开项目根目录下的终端。 然后写php artisan tinker。 然后echo Hash::make('password');

答案 2 :(得分:5)

在网站上找到解决方案

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();

答案 3 :(得分:5)

如果您担心将文本格式的用户密码不安全地保存到存储库或服务器,我建议您创建一个命令来为您创建用户。

请参阅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");
}

然后,您就可以从服务器运行命令,而且您还没有以基于文本的格式存储任何内容!

答案 4 :(得分: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'),
    ]);
  }
}

然后您应该在文件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
      ]);
    }
}

然后:
composer dump-autoload

最后是一个手动种子调用:
php artisan db:seed

答案 5 :(得分:3)

最合理的方法是使用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并创建第一个用户

参考:Database seeding in Laravel

答案 6 :(得分:0)

在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 = 'dhrubo@gmail.com';        // write the email you want
$user->save();