Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel 5嵌套类别和嵌套子类别_Php_Laravel 5_Categories_Laravel Eloquent - Fatal编程技术网

Php laravel 5嵌套类别和嵌套子类别

Php laravel 5嵌套类别和嵌套子类别,php,laravel-5,categories,laravel-eloquent,Php,Laravel 5,Categories,Laravel Eloquent,使用Laravel5.6,我试图显示MySQL类别表中一个子类别的子类别。我想传递名称并获取它的所有子类别,而不考虑父类别 类别表 id | name | cat_parent_id --- | ------------------| ------------- 1 | Parent - 1 | NULL 2 | Parent - 2 | NULL 3 | Child-1- P - 1 | 1 4

使用Laravel5.6,我试图显示MySQL类别表中一个子类别的子类别。我想传递名称并获取它的所有子类别,而不考虑父类别

类别表

 id  | name              | cat_parent_id
 --- | ------------------| ------------- 
 1   | Parent - 1        | NULL 
 2   | Parent - 2        | NULL 
 3   | Child-1- P - 1    | 1 
 4   | Child-1- P - 2    | 2 
 5   | sCh-1-Ch-1-P- 2   | 4 
 6   | sCh-2-Ch-1-P- 2   | 4 
 7   | sCh-3-Ch-1-P- 2   | 4 
 8   | sCh-4-Ch-1-P- 2   | 4 
 9   | sCh-5-Ch-1-P- 2   | 4 
期望的结果

return App\Category::where('name','Child-1-p-2')->Children->get()


如果我理解得很好,要获得
儿童
关系,您可以在
App\Category
模型上使用以下方法:

//app/Category.php
公共函数children():有许多
{
返回$this->hasMany(静态::类,'cat_parent_id','id');
}
然后获取主类别的所有子项:

使用App\Category;
$children=Category::where('name','Child-1-P-2')->first()->children;
下面是一个工厂的支持测试:

//数据库/factories/CategoryFactory.php
使用App\Category;
$factory->define(类别::类,函数)(Faker$Faker){
静态$id=1;
返回[
“名称”=>“类别”。$id++,
“cat\u parent\u id”=>null,
];
});
//tests/Unit/Models/CategoryTest.php
使用App\Category;
/**
*@测试
*/
公共函数返回\u关联的\u子\u记录()
{
//创建主记录
工厂(Category::class,3)->create();
//获取子类别的父级
$parent=$master->first();
//创建子类别
foreach(范围(1,4)为$id){
工厂(类别::类)->创建([
“名称”=>“子类别”。$id,
“cat\u parent\u id”=>$parent->id
]);
}
$this->assertEquals(
[‘第1子类’、‘第2子类’、‘第3子类’、‘第4子类’],
类别::where('name',$parent->name)->first()->children->pull('name')->toArray()
);
}

我在这里工作的假设是类别名称将是唯一的,否则您必须循环收集记录。

问题是什么?定义
子项
关系或..有问题?是的,我试图自己定义这段关系,但它没有给我想要的结果。你的假设是正确的!!名称将是唯一的。@Sebastian,我不得不从行中删除HasMany以获得结果。否则,它将导致“类型错误:App\Category::children()的返回值必须是App\HasMany的实例,lightlight\Database\Eloquent\Relations\HasMany返回的实例”。public function children():HasManySorry-是的,这应该作为
使用lluminate\Database\elounce\Relations\HasMany导入到您的类中,它将正常工作。
 id  | name              | cat_parent_id
 --- | ------------------| ------------- 
 5   | sCh-1-Ch-1-P- 2   | 4 
 6   | sCh-2-Ch-1-P- 2   | 4 
 7   | sCh-3-Ch-1-P- 2   | 4 
 8   | sCh-4-Ch-1-P- 2   | 4 
 9   | sCh-5-Ch-1-P- 2   | 4