Laravel 4 种子返回成功,但数据库中没有任何内容


Laravel 4 seed returns successful but nothing in database

我正在使用Laravel 4并尝试与一些用户一起播种数据库。 我正在使用Zizaco Confide插件,所以我的User模型扩展ConfideUser而不是Eloquent文档。 我也向模型添加了一些字段,但没有什么特别复杂的。 我尝试删除这些字段,但我遇到了同样的问题。

我创建了一个UserSeeder类,我用DatabaseSeeder调用该类,然后运行php artisan migrate:refresh --seed 。 它运行没有错误并返回"数据库已设定种子",除 users 之外的每个表都是如此。 不会插入任何用户。 我尝试使用User::create(array(...))$user = new User ... $user->save()创建用户,并得到了相同的结果。 没有错误被转储,我在系统上找不到的任何日志中都没有任何东西。 如果我在 UserSeeder->run() 方法中插入一些var_dumps,我会看到对象是使用正确的值创建的,但没有保存任何内容。

我错过了什么? 以下是一些代码示例,如果需要,我可以提供更多示例:

型号''用户.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;
    }
}

数据库''迁移''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' => 'nathan@abc.com',
                '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
            )
        );

在用户播种器类中执行此操作:

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

        $users = array(
        array(  'username' => 'local_test',
            'email' => 'nathan@abc.com',
            '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);
}
}

然后,确保在 DatabaseSeeder.php 文件中调用它

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

Confide 使用 Ardent 进行验证。 需要添加"password_confirmation"属性。此外,您不需要Hash::make,因为Confide也会为您处理。

<?php
class UsersTableSeeder extends Seeder
{
    public function run()
    {
        DB::table('users')->truncate();
        $users = array(
        array(  'username' => 'local_test',
            'email' => 'nathan@abc.com',
            '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);
    }
}

我发现播种机无声地失败。

我看到一个用户表。回归是种子的成功,但它是空的。我使用插入方法遵循了上面的答案。执行上述方法时,返回一个错误,指出列在数据库表中没有默认值。

我调整了列并从 laravel 文档中恢复到创建方法。然后它就成功了。

所以在我的实例中,有一个数据库错误,但它在没有告诉我的情况下失败了。使用插入方法,我能够找到错误。然后,一旦没有错误,创建方法就会起作用。