2015-12-20 11 views
7

Ich benutze Laravel (4.2)Laravel: Wie füge ich den ersten Benutzer in die Datenbank ein

Ich arbeite an einem Projekt mit einem Authentifizierungssystem. Ich muss einen ersten Benutzer in meine Benutzertabelle einfügen. Ich würde das gerne direkt mit einem SQL-Befehl (Einfügen in Benutzer ....) machen. Weil dieser erste Benutzer nicht mit den traditionellen Laravel-Methoden erstellt werden kann.

Dieser erste Benutzer wird nach dem Einfügen in die Tabelle mit der Methode auth :: triests identifiziert.

Wie füge ich diesen Benutzer in mysql Tabelle ein?

so etwas wie?

insert into users (login, password) values ('admin', 'crypted password which can be later identified with laravel') 
+0

Möchten Sie die 'SQL' aus' Laravel' heraus ausführen? Wenn nicht, warum führst du nicht 'SQL' von' phpMyAdmin' oder 'MySql-Konsole' aus. –

+0

Laravel arbeitet mit Routen, Controllern und Modellen Ich nehme an, Sie haben diese bereits festgelegt, bevor Sie Ihre Datenbank abfragen werden. – Franco

+0

Franco: nein Ich habe noch nicht alle diese Anforderungen. Für die anderen Nutzer werde ich natürlich haben. Aber für die erste, wie man es in die Datenbank einbaut? – Dom

Antwort

1

Der sinnvollste Weg ist die Verwendung von DatabaseSeeder für eine solche Aktion.

werde ich Beispiel direkt aus der Dokumentation verwenden:

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'))); 
    } 
} 

Nach einer solchen Seeder Erstellen nach php artisan migrate können Sie php artisan db:seed und Ihre ersten Benutzer ausgeführt wird

Referenz erstellt werden: Database seeding in Laravel

11

I mache es so:

creating seeder with artisan:

php artisan make:seeder UsersTableSeeder 

dann öffnen Sie die Datei und geben Sie Benutzer:

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'), 
     ]); 
    } 
} 

Wenn Sie zufällige Liste von Benutzern erstellen möchten, können Sie Fabriken:

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, 
      ]); 
     });*/ 
    } 
} 

dann in der Datei app/database/seeds/DatabaseSeeder.php Kommentieren oder hinzufügen in Run-Funktion eine Zeile:

$this->call(UsersTableSeeder::class); 

es wird wie folgt aussehen:

use Illuminate\Database\Seeder; 

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     $this->call(UsersTableSeeder::class); 
    } 
} 

Am Ende Sie laufen:

php artisan db:seed 

oder

php artisan db:seed --class=UsersTableSeeder 

Ich hoffe, dass jemand helfen. PS: diese wurde auf Laravel 5.3

getan
+1

Funktioniert gut in 5.4, danke! – AJMaxwell

2

Wenn Sie besorgt sind über das Kennwort eines Benutzers ungesichert in einem Textformat zu einem Repository oder Ihrem Server Speichern Ich schlage vor, die Schaffung eines Befehls Benutzer für Sie zu erstellen.

See Laravel docs: https://laravel.com/docs/5.6/artisan#generating-commands

Im Griff Methode hinzufügen etwas wie folgt aus:

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

Sie sind dann in der Lage den Befehl von dem Server ausgeführt werden, und Sie haben nichts in einem Text gespeichert basiertes Format!