Laravel 5.7 вложенных наборов - PullRequest
       29

Laravel 5.7 вложенных наборов

0 голосов
/ 03 декабря 2018

Я пытался заполнить вложенный набор массивом с помощью пакета Laravel 5.7 и https://github.com/lazychaser/laravel-nestedset, но всегда получал:

Ошибка преобразования массива в строку , когда функция попадает в дочерние узлы основного узла,Я тестирую пример, предоставленный на github, и не могу заставить его создавать дерево с вложенными узлами из массива при заполнении.

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

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

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

Может кто-нибудь подсказать, как я могу заполнить таблицу базы данных или какой-то другой пакет, такой как baum, который работаетс laravel 5.7?

Спасибо!

1 Ответ

0 голосов
/ 03 декабря 2018

Мне удается выполнить эту работу, поэтому для laravel 5.7 выполните следующие шаги:

  1. создайте новый проект laravel, установите параметры базы данных в .env: composer create-project laravel / laravelnestedset

  2. из цикла вложенных наборов: композитору требуется kalnoy / nestedset

  3. run: php artisan make: модель NestedSetModel -m

  4. изменить код приложения / NestedSetModel.php на:

    namespace App;
    use Kalnoy\Nestedset\NodeTrait;
    
    use Illuminate\Database\Eloquent\Model;
    
    class NestedSetModel extends Model
    {
        use NodeTrait;
    }
    
  5. изменить базу данных / migrations / 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 ремесленник делает: сеялка NestedSetTableSeeder

  7. изменить базу данных / seed / 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. run: php artisan migrate

  9. run: 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
...