【问题标题】:how to show this one to many relation data in hierarchical order in laravel?如何在laravel中以分层顺序显示这个一对多的关系数据?
【发布时间】:2020-03-06 12:19:52
【问题描述】:

需要提示以在层次结构上显示此一对多相关数据 在 laravel 视图页面中订购。这里蔬菜、杂货是类别和 其他的有相关产品吗。
Here is the image for data.

Need to show this every 1 to many related data on a hierarchical order on 
a single view page. I want to loop through these array and 
want my result like tree view:

【问题讨论】:

  • 到目前为止你尝试过什么?
  • $stock = DB::table('categories') ->join('ingridients', 'ingridients.category_id', '=', 'categories.id') ->select('categories .category_name', 'categories.id', 'ing_name', 'available_wt', 'available_pcs') ->get();这是我的后端代码,我不知道应该如何遍历这些数据,正如您所看到的,每个数组本身都有一个类别名称。任何帮助将不胜感激:)。
  • 你能发布你的模型吗???我们需要处理关系

标签: php mysql laravel one-to-many laravel-blade


【解决方案1】:

根据您提供的信息,我会尽力帮助您。

查看您的图像,告诉我您的数据库中已经有重复的数据。尽可能尝试为不同的实体使用不同的表。在这种情况下,您的类别会被反复使用。所以尝试为它创建一个新表。

话虽如此,您仍然有两个选择。您的成分和类别之间的一对多或多对多关系。这取决于您想要什么,您是否希望一种成分能够具有一个或多个类别。我在下面添加了一张图片来显示这两种类型的数据库结构。 (左:一对多,右:多对多)

您必须为类别和成分创建 2 个模型,并确保您可以使用这些模型来存储和接收来自数据库的数据。如果您想了解有关模型的更多信息,请查看此处: https://laravel.com/docs/6.x/eloquent#defining-models

创建模型后,您应该在模型中定义关系方法。这取决于您所做的选择。 (多对多或一对多)。

一对多:

在一对多示例中,一种成分只能有 1 个类别。因此,您必须在您的成分中创建一个名为 category 的方法,这应该返回一个 HasOne:

    /**
     * @return HasOne
     */
    public function category(): HasOne
    {
        return $this->hasOne(Category::class);
    }

那么您的类别可以有多个成分,因此您的类别应该获得一个名为成分的方法,并且它必须返回一个 BelongsToMany:

    /**
     * @return BelongsToMany
     */
    public function ingredients(): BelongsToMany
    {
        return $this->belongsToMany(Ingredient::class);
    }

多对多:

在多对多关系中,您的类别将是相同的,因为它仍然包含许多成分。只有成分会改变,因为它也没有很多类别。类别的方法现在将与成分的方法相同:

    /**
     * @return BelongsToMany
     */
    public function categories(): BelongsToMany
    {
        return $this->belongsToMany(Category::class);
    }

就是这样!现在如何使用它(希望能回答你的问题)。当您有如下类别时:

$category = Category::first();

您可以使用成分方法获取所有具有此类别的成分:

$category = Category::first();
$ingredients = $category->ingredients;

这将为您提供包含该类别所有成分的集合。

您也可以将其用于每个类别。

$categories = Category::all(); //Get all categories
foreach ($categories as $category) {
    $ingredients = $category->ingredients; //Get all ingredients
}

额外:

请注意,我没有在成分之后使用 (),这与执行的 mysql 查询有关(如果没有 (),它将查看是否有结果(如果是,它将使用这些或否,它将查询您的数据库,然后使用结果))。

【讨论】:

  • 谢谢先生。我非常明白。
猜你喜欢
  • 2021-08-25
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
相关资源
最近更新 更多