laravel 5.7嵌套集

时间:2018-12-03 12:37:10

标签: laravel nested-sets

我尝试使用Laravel 5.7和https://github.com/lazychaser/laravel-nestedset包为带有数组的嵌套集设置种子,但是总是得到:

数组到字符串的转换错误,当函数到达主节点子节点时。 我正在github上提供的示例上进行测试,并且无法在播种时使其通过数组从嵌套节点创建树。

$node = Category::create([
    'name' => 'Foo',

    'children' => [
        [
            'name' => 'Bar',

            'children' => [
                [ 'name' => 'Baz' ],
            ],
        ],
    ],
]);

谁能建议我如何播种数据库表或其他与laravel 5.7一起使用的包如baum?

谢谢!

1 个答案:

答案 0 :(得分:2)

我成功完成了这项工作,因此对于laravel 5.7,请按以下步骤操作:

  1. 创建一个新的laravel项目,在.env中设置数据库参数:作曲家create-project laravel / laravel nestedset

  2. 从嵌套集合运行:作曲家需要kalnoy / nestedset

  3. 运行:php artisan make:model NestedSetModel -m

  4. 将app / NestedSetModel.php代码更改为:

    namespace App;
    use Kalnoy\Nestedset\NodeTrait;
    
    use Illuminate\Database\Eloquent\Model;
    
    class NestedSetModel extends Model
    {
        use NodeTrait;
    }
    
  5. 将数据库/迁移/xxxx_xx_xx_xxxxxx_create_nested_set_models_table.php更改为:

    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateNestedSetModelsTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('nested_set_models', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->nestedSet();
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('nested_set_models');
        }
    }
    
  6. 运行:php artisan make:seeder NestedSetTableSeeder

  7. 将数据库/种子/NestedSetTableSeeder.php更改为

    <?php
    
    use Illuminate\Database\Seeder;
    
    class NestedSetTableSeeder extends Seeder
    {
    
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $node = App\NestedSetModel::create([
                'name' => 'Foo',
                'children' => [
                    [
                        'name' => 'Bar',
                        'children' => [
                            ['name' => 'Baz'],
                        ],
                    ],
                ],
        ]);
      }
    }
    
  8. 运行:php artisan migration

  9. 运行:php artisan db:seed

您应该能够正确查看种子数据库中的新表。

1   Foo 1   6       2018-12-03 16:54:20 2018-12-03 16:54:20
2   Bar 2   5   1   2018-12-03 16:54:20 2018-12-03 16:54:20
3   Baz 3   4   2   2018-12-03 16:54:20 2018-12-03 16:54:20