Laravel - 种子数据类别

时间:2016-11-07 14:51:00

标签: php arrays database laravel eloquent

我目前遇到以下问题:我正在尝试为我的应用程序实现一个catgeory系统。因此,我需要大约100-200个类别和一些“父类别”。所以我想创建两个表:Category,Subcategory。类别表包含父类别,子类别是这些类别的子类别,指向父类别的主键。这就是我对类别事物的意思:

父母类别:服装

子类别:女鞋

子类别:男士衬衫

子类别:牛仔裤

父类别:Handys

子类别:智能手机

子类别:PDA的

子类别:智能手表

等等。

我试过的是:

 $categories = array(['name' => 'Clothing'], ['name' => 'Handy']);
        $sub_categories = array(
            'Clothing' => ['name' => ' Woman Shoes '], ['name' => 'Men\'s Shirts'],
            'Handy' => ['name' => ' Smartphones '], ['name' => 'Smartwatches ']
        );


        foreach($categories as $category)
        {
            $category = Category::create($category);
        foreach ($sub_categories as $sub_category)
        {
            $active = $sub_category[$category->name];
            $active['parent_id'] = $categories->id;
            SubCategory::create($active);
        }
    }

但是我得到了错误(播种时)index undefined: clothing,猜测是因为那部分:$sub_category[$category->name]; ......但我怎样才能做得更好?或者我怎样才能使这个工作?

我也尝试过(在内在的foreach中):

 $subcategory = new Subcategory();
 $subcategory->name = $sub_category['name'];
 $subcategory->parent_id = $category['id'];
 $subcategory->save();

这样,没有错误,但每个父类别都有子类别,所以我不会查找子类别父类。

我怎样才能得到我想要的东西?

2 个答案:

答案 0 :(得分:1)

我已经测试了这个并且工作正常:

$data = [
    'Clothing' => ['Woman Shoes', 'Men\'s Shirts'],
    'Handy' => ['Smartphones', 'Smartwatches ']
];

foreach ($data as $category => $subCategories)
{
    $id = Category::create(['name' => $category])->id;

    foreach ($subCategories as $subCategory) {
        SubCategory::create([
            'parent_id' => $id,
            'name' => $subCategory
        ]);
    }
}

不要忘记将所有字段添加到$fillable,因为您使用的是create()方法。

答案 1 :(得分:1)

你应该使用Laravel Relationships ......

此处Category和SubCategory之间的关系为One to Many,因此您可以创建这样的关系。

// App\Models\Category Model
public function sub_categories() {
    return $this->hasMany('App\Models\SubCategory');
}

// App\Models\SubCategory Model
public function category() {
    return $this->belongsTo('App\Models\Category');
}

foreach($categories as $category_arr) {
    $cat = Category::create($category_arr);
    foreach($sub_categories[$category_arr['name']] as $sub_arr) {
        $sub_cat_obj_arr[] = new SubCategory($sub_arr);
    }
    $cat->sub_categories()->saveMany($sub_cat_obj_arr);
}

希望这有助于以Laravel方式解决您的问题