我正在使用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_dump,我会看到使用正确的值创建对象,但没有任何保存。
我错过了什么?这是一些代码示例,如果需要我可以提供更多:
模型\ 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;
}
}
数据库\迁移\ 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');
}
}
数据库\种子\ 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
)
);
答案 0 :(得分:3)
在您的用户播种器类中执行此操作:
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');
}
}
答案 1 :(得分:1)
Confide使用Ardent进行验证。添加&#39; password_confirmation&#39;物业是必需的。此外,您不需要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);
}
}
答案 2 :(得分:0)
我发现播种机无声地失败了。
我看到了一个用户表。回归是种子成功,但它是空的。 我使用insert方法跟随上面的答案。 执行上述方法时,返回错误,指出列中的数据库表中没有默认值。
我调整了列并从laravel doc恢复为create方法。 然后它成功了。
所以在我的实例中有一个数据库错误,但它没有告诉我就失败了。 使用插入方法,我能够找到错误。 然后,一旦没有错误,create方法就会起作用。