【问题标题】:Laravel - seed Data for categoriesLaravel - 类别的种子数据
【发布时间】:2017-03-20 23:10:42
【问题描述】:

我目前遇到以下问题:我正在尝试为我的应用实施分类系统。因此,我需要大约 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();

这样就没有报错了,但是每一个父类都有每一个子类,所以我就不找子类parents了。

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

【问题讨论】:

    标签: php arrays database laravel eloquent


    【解决方案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() 方法。

    【讨论】:

    • 好的,现在答案是什么?将最后一行更改为您提供的代码?同样的错误,未定义的索引...
    • 我已经更新了我的代码。它会为您工作,并且更具可读性。
    • 是的,这很好用。我现在使用 protected $guarded = ['id'];因为其他一切都应该是可批量分配的。
    【解决方案2】:

    你应该使用 Laravel 关系...

    这里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 方式解决您的问题

    【讨论】:

    • 在我的情况下使用它的方法是什么?只是顶部相同的定义,然后是两个函数加上foreach?
    • [Symfony\Component\Debug\Exception\FatalThrowableError] 类型错误:传递给 Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 的参数 1 必须是 Illuminate\Database\Eloquent 的实例\Model,给定的布尔值
    • 类型错误:传递给 Illuminate\Database\Eloquent\Model::__construct() 的参数 1 必须是数组类型,给定字符串
    • 您所做的更改是否正确?子类别属于自身?
    • 不是我的错,SubCategory 属于 Categpry,不错
    猜你喜欢
    • 1970-01-01
    • 2015-02-04
    • 2017-09-05
    • 1970-01-01
    • 2019-01-17
    • 2014-11-21
    • 2017-11-27
    • 1970-01-01
    • 2016-07-13
    相关资源
    最近更新 更多