我目前被困在以下:我试图实现一个类别系统到我的应用程序。因此,我需要大约100-200个类别与一些"父类别"。我想创建两个表:Category和Subcategory。类别表保存父类别,子类别是它们的子类别,指向父类别的主键。下面是我对category的定义:
父类:服装
子类:女鞋
子类别:男衬衫
子类:牛仔裤
父类: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();
这样,就没有错误,但是每个父类别都有每个子类别,所以我不寻找子类别的父类别。
我怎样才能得到我想要的?
我已经测试过了,效果很好:
$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()
方法。
你应该使用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);
}