Laravel 7:如何在数据播种器阵列中使用
如何使用数据库种子机使用自定义数组进行不同的插入 使用以下代码:Laravel 7:如何在数据播种器阵列中使用,laravel,eloquent,Laravel,Eloquent,如何使用数据库种子机使用自定义数组进行不同的插入 使用以下代码: $categories=[‘硬件’、‘软件’、‘规划’、‘工具’]; foreach($categories作为$category){ App\Category::insert([ “名称”=>$category, 'slug'=>Str::slug($category), ]); } 如果我使用insert或create的话,如果没有一个类别的工厂,它就无法工作 它给出了这个错误 找不到[App\Category]的工厂。 位
$categories=[‘硬件’、‘软件’、‘规划’、‘工具’];
foreach($categories作为$category){
App\Category::insert([
“名称”=>$category,
'slug'=>Str::slug($category),
]);
}
如果我使用insert
或create
的话,如果没有一个类别的工厂,它就无法工作
它给出了这个错误
找不到[App\Category]的工厂。
位于vendor/laravel/framework/src/illumb/Database/elount/FactoryBuilder.php:273
269| */
270 |受保护的函数getRawAttributes(数组$attributes=[])
271| {
272 |如果(!isset($this->definitions[$this->class])){
>273 |抛出新的InvalidArgumentException(“无法找到[{$this->class}]的工厂”);
274| }
275|
276 |$definition=调用用户函数(
277 |$this->definitions[$this->class],
谢谢尝试使用witch,将数组作为参数:
public function run()
{
$inputs[] = ['name'=> 'Hardware'];
$inputs[] = ['name'=> 'Software'];
$inputs[] = ['name'=> 'Planning'];
$inputs[] = ['name'=> 'Tools'];
App\Category::insert($inputs);
}
或者你可以用另一种方式:
public function run()
{
$inputsNames = ['Hardware', 'Software', 'Planning', 'Tools'];
foreach($inputsNames as $categoryName)
{
$inputs[]=['name'=>$categoryName];
}
App\Category::insert($inputs);
}
在播种器文件的run方法中创建数据数组
public function run()
{
$categories = [
['name' => 'Music'],
['name' => 'Gaming'],
['name' => 'Entertainment'],
['name' => 'Non-Profit & Activism'],
['name' => 'Other'],
];
foreach ($categories as $category) {
Category::create($category);
}
}
您正在将所有数据推送到模型中,因此需要在模型中设置可填充或保护
class Category extends Model
{
protected $guarded = [];
}
您需要添加与
列名相同的键
和值
,例如:['name'=>'Hardware']
问题是如果没有工厂,它会抛出一个错误。看看我更新的帖子,没有工厂是不行的。但是在文档中找不到真正的解决方案。更新方法没有工厂也行,无论如何,请分享你的播种机代码我没有足够清楚地解释我的问题,因为我不理解我遇到的错误,我的问题我使用facker在post factory中生成了一个类别id。类似于这样的php'category\u id'=>factory(category::class)->create()->id,
,正如您所看到的,我的post factory依赖于一个类别工厂。