当前位置: 首页 > 知识库问答 >
问题:

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

潘衡
2023-03-14

使用Laravel 5.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'))-

 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 

共有1个答案

漆雕奇
2023-03-14

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

// app/Category.php

public function children(): HasMany
{
    return $this->hasMany(static::class, 'cat_parent_id', 'id');
}

然后获取主类别的所有子类:

use App\Category;

$children = Category::where('name','Child-1- P - 2')->first()->children;

下面是一个工厂的支持测试:

// database/factories/CategoryFactory.php

use App\Category;

$factory->define(Category::class, function (Faker $faker) {
    static $id = 1;
    return [
        'name' => 'Category '.$id++,
        'cat_parent_id' => null,
    ];
});

// tests/Unit/Models/CategoryTest.php

use App\Category;

/**
 * @test
 */
public function returns_associated_child_records()
{
    // create master records
    factory(Category::class, 3)->create();

    // get parent for the sub-categories
    $parent = $master->first();

    // create sub-categories
    foreach(range(1, 4) as $id) {
        factory(Category::class)->create([
            'name' => 'Sub category '.$id,
            'cat_parent_id' => $parent->id
        ]);
    }

    $this->assertEquals(
        ['Sub category 1', 'Sub category 2', 'Sub category 3', 'Sub category 4'],
        Category::where('name', $parent->name)->first()->children->pluck('name')->toArray()
    );
}

我在这里工作的假设是类别名称是唯一的——否则你必须循环记录的集合。

 类似资料:
  • 我正在开始使用Hibernate,有一个关于InheritanceType.Jointed和@PrimaryKeyJoinColumn的问题。 谈到Manager类时,我不确定要为@PrimaryKeyJoinColumn使用哪个值。通过阅读JPA规范,我应该在整个Superclass/Subclass/Subclass层次结构中只使用一个id,我怀疑它应该是person_id。 我是否应该从ma

  • 目标 了解如何定义嵌套类和何时适合使用它们 了解使用嵌套类的副作用 了解 new 运算符在嵌套类中的特殊用法 了解如何和何时使用静态内部类和匿名内部类 在何处使用嵌套类 顾名思义,嵌套类(或内部类) 是在一个类中定义的另一个类。 public class EnclosingClass { . . . public class NestedClass { . . . } } 像成

  • Oracle留档(在下面的链接)说: 非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有的。 但在下面的示例中,我创建了一个对象(内部类),它无法访问其封闭外部类的任何方法或变量。下面是代码,你能解释一下吗? http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html 使用Main方法初始化 对于对象,我无法访问其

  • 问题内容: 我可以做以下事情吗? 问题答案: 香草CSS不可能。但是,您可以使用类似: Sass使CSS再次变得有趣。Sass是CSS3的扩展,添加了嵌套规则,变量,mixins,选择器继承等。使用命令行工具或网络框架插件将其转换为格式良好的标准CSS。 要么 不用构造长的选择器名称来指定继承,在Less中,您可以简单地将选择器嵌套在其他选择器中。这样可以使继承更清晰,样式表更短。 例:

  • 本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结

  • 我在当前项目中使用Sass(.scss)。 以下示例: HTML SCSS 这个很管用。 我可以处理多个类,同时使用嵌套样式。 在上面的示例中,我讨论了以下内容: CSS 在这种情况下,所有通常为,但为蓝色。 我如何在中与Sass嵌套?