Laravel 5.7 嵌套集教程

这篇博客介绍了如何在 Laravel 5.7 中使用 nestedset 库创建和管理嵌套集,实现层级数据存储。通过安装 Laravel 和 laravel-nestedset,创建模型和数据库迁移,填充数据,建立路由和控制器,最终在视图中展示分层数据,演示了一个简单的电商分类菜单的构建过程。
摘要由CSDN通过智能技术生成

Laravel中的嵌套集是今天的主题的嵌套集模型是根据树遍历对节点进行编号,遍历每个节点两次,按访问顺序分配编号,并在两次访问时分配。这为每个节点留下了两个数字编号,它们存储为两个属性。查询变得更便宜:可以通过比较这些数字来测试层次结构成员资格。 更新则需要重新编号。

什么是 Nested Set

嵌套集或嵌套集模型(NSM)是有效地将分层数据存储在关系表中的方法。

用例

当树很少更新时,NSM显示出良好的性能。 它被创建为快速获取相关节点。
它非常适合为商店构建多个深度菜单或类别。

关系

嵌套集是一个填充了不同节点的树结构。 所以他们之间的关系如下。

  • 节点属于父节点
  • 节点有许多子节点
  • 节点有很多祖先
  • 节点有很多后代

Nested Set 在Laravel中的例子

我们将使用以下命令安装Framework来开始此Laravel 5.7嵌套集教程。

Step 1: 安装Laravel

我正在使用Valet。 所以,我需要输入以下命令来创建一个项目。

laravel new nestedset

当然如果你没有用Homestead或者Valet, 你也可以用下面的命令。

composer create-project laravel/laravel nestedset --prefer-dist

安装好后进入项目目录。

cd nestedset

.env文件中配置你的数据库。

Step 2: 安装 laravel-nestedset composer 包。

又可以在这里找到官方的Github仓库。

使用下面的composer命令来安装。

composer require kalnoy/nestedset

装好了后,我们来配置下它。

首先,我们正在努力建立一个电子商务商店。所以这是一个完美的场景,我们可以使用嵌套集,因为我们有第一个类别,然后是子类别和子子类别等等。 所以我们试图制作一个列表,其中,根是主要类别,然后它的所有子节点都是子类别。

Step 3: 创建一个模型和数据库迁移。

在你的终端中,使用如下命令:

php artisan make:model Shop -m

上面的命令就是同时生产模型和迁移文件的。

现在,在迁移文件中,我们需要添加一些由嵌套集库提供的额外列。

    <?php

    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    // 以下仅在laravel版本小于5.5时用
    // use Kalnoy\Nestedset\NestedSet;

    class CreateShopsTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('shops', function (Blueprint $table) {
                $table->increments('id');
                $table->string('category_name');
                // NestedSet::columns($table); //低于laravel 5.5的老版本用这个命令
                $table->nestedSet();
                $table->timestamps();
            });
        }

        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('shops');
        }
        //以下的命令只单独删除Nested Set的字段,不会删除表,注意!
        // public function down()
        // {
        //     Schema::table('shops', function (Bluep
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值