首页 > 解决方案 > Laravel 7:如何在数据播种器数组中使用

问题描述

如何使用数据库播种器使用自定义数组进行不同的插入?

使用以下代码:

$categories = ['Hardware', 'Software', 'Planning', 'Tools'];
        foreach ($categories as $category) {
            App\Category::insert([
                'name' => $category,
                'slug' => Str::slug($category),
            ]);
        }

如果我使用insertcreate.

它给出了这个错误

Unable to locate factory for [App\Category].

  at vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:273
    269|      */
    270|     protected function getRawAttributes(array $attributes = [])
    271|     {
    272|         if (! isset($this->definitions[$this->class])) {
  > 273|             throw new InvalidArgumentException("Unable to locate factory for [{$this->class}].");
    274|         }
    275| 
    276|         $definition = call_user_func(
    277|             $this->definitions[$this->class],

谢谢

标签: laraveleloquent

解决方案


在播种器文件的 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 = [];
}

推荐阅读