Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 4 seed returns successful but nothing in database

I'm working with Laravel 4 and trying to seed the database with some users. I'm using the Zizaco Confide plugin, so my User model extends ConfideUser instead of Eloquent per the documentation. I added a few fields to the model also, but nothing super complicated. I have tried removing those fields but I get the same issue.

I created a UserSeeder class that I call with the DatabaseSeeder and then run php artisan migrate:refresh --seed. It runs without error and returns "The database has been seeded", and that is true for every table except users. No users ever get inserted. I've tried creating the user with User::create(array(...)) as well as $user = new User ... $user->save() and I get the same results. No errors are dumped, and nothing is in any log I can find on the system. If I insert some var_dumps in the UserSeeder->run() method, I see that the objects are created with the correct values, but nothing saves.

What am I missing? Here's some code samples, I can provide more if needed:

models\User.php:

<?php

use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
use Zizaco\Confide\ConfideUser;

//class User extends Eloquent implements UserInterface, RemindableInterface {
class User extends ConfideUser
{
    // for Entrust
    use \Zizaco\Entrust\HasRole;

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'users';

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = array('password');

    public function agency()
    {
        if ($this->agency_type == 'local')
        {
            return $this->hasOne('Local');
        }

        if ($this->agency_type == 'county')
        {
            return $this->hasOne('County');
        }
    }

    /**
     * Get the unique identifier for the user.
     *
     * @return mixed
     */
    public function getAuthIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->password;
    }

    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->email;
    }

}

database\migrations\xxxxxxxxx_confide_setup_users_table.php:

<?php
use Illuminate\Database\Migrations\Migration;

class ConfideSetupUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        // Creates the users table
        Schema::create('users', function($table)
        {
            $table->increments('id');
            $table->string('username');
            $table->string('email');
            $table->string('password');
            $table->string('confirmation_code');
            $table->boolean('confirmed')->default(false);
            $table->string('address1');
            $table->string('address2')->nullable();
            $table->string('state', 2);
            $table->string('zipcode', 9);
            $table->string('phone', 10);
            $table->string('extension',5 )->nullable();
            $table->string('fax', 10)->nullable();
            $table->enum('agency_type', array('local', 'county', 'state'))->default('local');
            $table->integer('agency')->unsigned()->nullable();
            $table->dateTime('last_seen');
            $table->timestamps();
            $table->softDeletes();
        });

        // Creates password reminders table
        Schema::create('password_reminders', function($t)
        {
            $t->string('email');
            $t->string('token');
            $t->timestamp('created_at');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('password_reminders');
        Schema::drop('users');
    }

}

database\seeds\UserSeeder.php:

<?php

use \Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->delete();

        User::create(
            array(
                'username' => 'local_test',
                'email' => '[email protected]',
                'password' => Hash::make('local'),
                'confirmation_code' => '483JU3ID8',
                'confirmed' => true,
                'address1' => '123 Main St.',
                'state' => 'MI',
                'zipcode' => '12345',
                'phone' => '5559993436',
                'agency_type' => 'local',
                'agency' => null,
                'last_seen' => new DateTime
            )
        );
like image 783
Nathan Loding Avatar asked Oct 17 '13 16:10

Nathan Loding


2 Answers

Do this in your user seeder class:

class UsersTableSeeder extends Seeder
{
    public function run()
    {

     DB::table('users')->truncate();



        $users = array(
        array(  'username' => 'local_test',
            'email' => '[email protected]',
            'password' => Hash::make('local'),
            'confirmation_code' => '483JU3ID8',
            'confirmed' => true,
            'address1' => '123 Main St.',
            'state' => 'MI',
            'zipcode' => '12345',
            'phone' => '5559993436',
            'agency_type' => 'local',
            'agency' => null,
            'last_seen' => new DateTime
                )
        );

             // make sure you do the insert
         DB::table('users')->insert($users);

}
}

and then, make sure you invoke it in your DatabaseSeeder.php file

<?php

class DatabaseSeeder extends Seeder {

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

}
like image 104
Glad To Help Avatar answered Oct 19 '22 04:10

Glad To Help


Confide uses Ardent for validation. adding 'password_confirmation' property is required. Also you don't need to Hash::make since Confide will also handle that for you.

<?php

class UsersTableSeeder extends Seeder
{
    public function run()
    {

        DB::table('users')->truncate();

        $users = array(
        array(  'username' => 'local_test',
            'email' => '[email protected]',
            'password' => 'local',
            'password_confirmation' => 'local',
            'confirmation_code' => '483JU3ID8',
            'confirmed' => true,
            'address1' => '123 Main St.',
            'state' => 'MI',
            'zipcode' => '12345',
            'phone' => '5559993436',
            'agency_type' => 'local',
            'agency' => null,
            'last_seen' => new DateTime
                )
        );

         // make sure you do the insert
         DB::table('users')->insert($users);

    }
}
like image 1
jesusOmar Avatar answered Oct 19 '22 03:10

jesusOmar