Laravel播种不会填满田地
我有一个数据库种子文件: 当我运行php artisan migrate:refresh--seed时,它会为数据库种子并在contacts表中创建相关记录,只是它不会用种子数组中的任何信息填充字段。我对其他表使用了完全相同的语法,它们工作得很好,我还彻底检查了每个字段,以确保它们与数据库字段匹配,但无论我做什么,它都不会正确播种Laravel播种不会填满田地,laravel,laravel-4,migrate,seeding,Laravel,Laravel 4,Migrate,Seeding,我有一个数据库种子文件: 当我运行php artisan migrate:refresh--seed时,它会为数据库种子并在contacts表中创建相关记录,只是它不会用种子数组中的任何信息填充字段。我对其他表使用了完全相同的语法,它们工作得很好,我还彻底检查了每个字段,以确保它们与数据库字段匹配,但无论我做什么,它都不会正确播种 有人有什么想法吗?您是否尝试替换以下行: foreach ($contacts as $contact) { Contact::create($contact
有人有什么想法吗?您是否尝试替换以下行:
foreach ($contacts as $contact) {
Contact::create($contact);
}
与
假设您的表名为contact。
还有,确保你有这样的线路
$this->call('ContactTableSeeder');
在DatabaseSeeder类中。在DatabaseSeeder类的
run()
函数中是否有$this->调用(“ContactTableSeeder”)
如果您在自己的文件中有contacttableeeder
,那么该文件名为contacttableeeder.php
是否准确?如果没有,它将无法按照
这是我的第一个想法。原来问题与我的模型中的关系有关
对于这个问题的未来访问者:确保检查模型中定义hasOne/hasMany/etc关系的所有函数。仔细阅读,了解更多信息。我也有同样的问题,但上述解决方案都不适用于我。原来是因为我的模型中有一个构造函数!在我移除这个之后,它工作得很好
public function __construct()
{
parent::__construct();
}
编辑:
在进一步阅读之后,我发现问题是由于这样一个事实,即如果要在模型中包含构造函数,必须接受attributes参数并将其传递给父级。如果这样做,那么构造函数不会破坏DB种子设定(可能还有其他事情)。我希望这能帮别人省去头痛
public function __construct($attributes = array())
{
parent::__construct($attributes);
}
我的表名是contacts。我应该能够像在其他种子中一样使用Eloquent为数据库种子;它表示调用未定义的函数insert()。我用的是Laravel 4。我的答案错了。它应该是DB::table('contact')->insert($contacts);好的,您的语法错误,应该是DB::table('contacts')->insert($contacts);这是有效的,那么为什么雄辩不起作用。@Gaz-大规模任务保护可能会阻止它?我刚刚编辑了一个种子文件以匹配您的语法,它工作正常,尽管我的名为
tenattableseeder
。您是否尝试过composer update
以获取最新版本的Laravel 4?我正在我的DatabaseSeeder class run()方法中调用$this->call('ContactTableSeeder'),文件名是正确的。我还运行了composer更新,没有错误。唯一使用这种语法的表是my users表。问题不在于调用种子,甚至不在于插入记录,而是插入它们,它们只是空的。将DatabaseSeeder.php文件的源粘贴到这里怎么样:还有,你的Contact.php和ContactTableSeeder.php文件?你能更详细地解释一下你的关系最终出现了什么问题吗?对不起,我不太记得了。我想这可能是因为我没有设置联系人模型。我只是遇到了这个问题。在我的例子中,我已经将它添加到用户模型中:public function User(){return$this->hasOne('Manager','userid');}
但是它应该是一个Manager()
函数。您只需要确保模型关系正确。是否在模型中设置了$fillable或$CURDED属性?如果没有,那么由于质量赋值,Laravel将不允许您使用::create()方法填充字段。检查这里-
public function __construct()
{
parent::__construct();
}
public function __construct($attributes = array())
{
parent::__construct($attributes);
}