我有一个数据库种子文件:
class ContactTableSeeder extends Seeder {
public function run()
{
$contacts = array(
array(
'first_name' => 'Test',
'last_name' => 'Contact',
'email' => 'test.contact@emai.com',
'telephone_number' => '0111345685',
'address' => 'Address',
'city' => 'City',
'postcode' => 'postcode',
'position' => 'Director',
'account_id' => 1
)
);
foreach ($contacts as $contact) {
Contact::create($contact);
}
}
}
当我运行php artisan migrate时:refresh --seed它为数据库播种并在contacts表中创建相关记录,除了它没有用种子数组中的任何信息填充字段。我对其他表使用完全相同的语法并且它们工作正常,我还彻底检查了每个字段以确保它们与数据库字段匹配,但无论我做什么它都不能正确播种。
有没有人有任何想法?
答案 0 :(得分:12)
我遇到了同样的问题,但上述解决方案都没有对我有用。结果是由于我的模型中有一个构造函数!删除后,它工作正常!
public function __construct()
{
parent::__construct();
}
编辑: 在进一步阅读之后,我发现问题是由于如果要在模型中包含构造函数,必须接受attributes参数并将其传递给父级。如果你这样做,那么构造函数不会破坏数据库种子(可能还有其他东西)。我希望这可以让别人头疼。
public function __construct($attributes = array())
{
parent::__construct($attributes);
}
答案 1 :(得分:1)
原来问题与模型中的关系有关。
对于此问题的未来访问者:确保检查模型中定义hasOne / hasMany / etc关系的所有函数。请阅读Eloquent docs了解更多信息。
答案 2 :(得分:0)
您是否尝试更换以下行:
foreach ($contacts as $contact) {
Contact::create($contact);
}
与
DB::table('contact')->insert($contacts);
假设您的表名是联系人。 而且,确保你有这样的行
$this->call('ContactTableSeeder');
在 DatabaseSeeder 类中。
答案 3 :(得分:0)
您的DatabaseSeeder课程'$this->call("ContactTableSeeder")
功能中有run()
吗?
如果你自己的文件中有ContactTableSeeder
,那么文件名为ContactTableSeeder.php
吗?如果不是,则根据PSR-0 Standard.
这是我的第一个想法。