【问题标题】:Laravel: Show category list by specifying parent categoryLaravel:通过指定父类别显示类别列表
【发布时间】:2021-09-11 08:04:31
【问题描述】:

我正在尝试在表格中显示类别。这是我想在视图文件中使用的表结构。

类别        |父类
衬衫               衣服
观看              不适用

这是我的数据库表结构

如您所见,父类别列包含父类别的 ID。因此,如果我在表中获取并显示数据,那么我会在Parent Category comumn 中获取 ID 而不是名称。

我正在尝试找到一种解决方案,在该解决方案中,我获取父类别的名称而不是 ID。

我做这种Database表结构,以为是分类表的专业表结构。如果解决方案包括修改表结构,我也可以更改数据库表结构,但它需要看起来很专业。

那么有没有办法解决呢? 谢谢

【问题讨论】:

  • 寻找laravel关系。在该模型中创建一个 belongsto 函数,该函数将返回父模型本身。
  • @atikurrahman 我的类别和子类别在同一个数据库表中。在我给定的屏幕截图中,那些在parent_category 列中有Null 的类别是父类别本身。所以我猜 Laravel 关系需要超过 1 个 db 表。
  • 同一张桌子不会有问题。只需将其与相同的模型相关联即可。
  • @atikurrahman 哇,我从来没有想过这样的事情。我会试试这个,让你知道。
  • @atikurrahman 自加入效果很好,谢谢,您可以将其发布为答案^^

标签: mysql database laravel


【解决方案1】:

寻找laravel关系。在该模型中创建一个 belongsto 函数,该函数将返回父模型本身。只需将其与同一模型相关联。 你可以参考自己,使用 $this

class Category extends Eloquent {

    function parentCategory(){
        return $this->hasMany($this, 'parent_id');
    }
}

查看文档以了解更多 Laravel 构建模型关系,这太棒了。

【讨论】:

  • 你也可以使用self类
  • 谢谢你的回答,其实我没有用这个方法解决我的问题。我所做的是在听到您的建议后,我使用自联接进行查询。我和同一张桌子一起加入我的桌子。我没有在模型文件中添加任何功能。因此,如果您添加一个自加入的 laravel 查询,那么我将接受您的答案,因为自加入查询在这里帮助了我。但现在肯定 +1 以帮助我。
  • @Rishabh 实际上你所做的是 mysql 的常规进程,而我提供的是 laravel 方式,它实际上是相同的。我建议你在使用 laravel 时去做。
【解决方案2】:

假设您的表名是类别,因此您可以在核心 php 查询中尝试此操作
这将在单独的列中为您提供 parent_category_name

select c.*, (select category from categories where id = c.parent_category) as parent_category_name from categories as c

下面的查询将在 parent_category_id 的位置为您提供 parent_category 名称

select id, category, category_slug, (select category from categories where id = c.parent_category) as parent_category from categories as c

【讨论】:

    【解决方案3】:

    将此关系添加到您的类别模型 (Category.php)

    public function parentCategory () {
        return $this->belongsTo('App\Models\Category', 'parent_category');
    }
    

    您现在可以使用 CategoryController.php 中的 with() 方法使用父类别数据加载您的类别

    $categories = Category::with('parentCategory')->get();
    

    在您的刀片文件中,您现在可以执行类似的操作

    @foreach ($categories as $category)
        {{ $category->parentCategory->name }}
    @endforeach
    

    【讨论】:

      【解决方案4】:

      您可以像这样在Category 模型上添加关系:

      public function parent()
      {
          return $this->belongsTo('App\Models\Category', 'parent_category');
      }
      

      【讨论】:

      • 感谢您的回答。虽然我还不是 Laravel 专家,只是初学者。所以我不确定在哪里使用它。根据我的猜测,我在控制器功能中使用它。但是,如果我在函数中返回您给定的代码,那么我将在哪里返回视图文件。如果您详细说明代码以便像我这样的初学者可以理解,那就太好了:)
      猜你喜欢
      • 2014-04-09
      • 1970-01-01
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2021-06-15
      • 1970-01-01
      相关资源
      最近更新 更多