我目前遇到以下问题:我正在尝试为我的应用程序实现一个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();
这样,没有错误,但每个父类别都有子类别,所以我不会查找子类别父类。
我怎样才能得到我想要的东西?
答案 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方式解决您的问题