是否有正确的方法来获取Laravel中子类别的所有父类别?
类别表:
id | level | name | parent_id
--- | ------| -------|----------
1 | 1 | Cat0 | -1
2 | 2 | Cat01 | 1
3 | 3 | Cat02 | 2
4 | 2 | Cat01a | 2
类别模型:
class Category extends Model
{
protected $fillable = [
'id', 'level', 'name', 'parent_id'
];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function items()
{
return $this->hasMany(Item::class);
}
}
从id = 4
所有父母那里获得一个收藏品似乎很难。
我试图像这样更改我的模型: Laravel returning children of parents in same table
..但它没有显示所需的结果。
我的控制器类:
class FrontEndController extends Controller
{
public function item($item_slug, $id = null) {
$item = Item::where('item_slug', '=', $item_slug)
->orWhere('id', '=', $id)->firstOrFail();
$categories = $item->category()->first();
$categoryTree = [];
array_push($categoryTree, $categories);
for($l = $categoryTree[0]['level']; $l > 1; $l--) {
if((int)$l === $categoryTree[0]['level']) {
$c = Category::where('id', '=', $categoryTree[0]['parent_id'])->first()->toArray();
} else {
$c = Category::where('id', '=', end($categoryTree)['parent_id'])->first()->toArray();
}
array_push($categoryTree, $c);
}
return view('public.item')->with([
'item' => $item,
'attributes' => $item->attributes()->get(),
'categories' => array_reverse($categoryTree),
]);
}
}
这显然有效,我将所有类别和子类别都放在一个数组中,但不能作为一个干净的集合。