Вложенные наборы laravel 5.7

Я пытался засеять вложенный набор массивом с 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) Следили ли вы за Инструкция по установке? 2) Соответствуют ли ваши данные вашим отношениям?

Clément Baconnier 03.12.2018 13:44

Спасибо за комментарий. Да, я выполнил инструкции, и модель соответствует отношениям - я могу даже засеять узлы без дочерних узлов, например: $ node = Category :: create ([['name' => 'Foo',], ['name' => 'Баз',],]); Когда у массива есть «дети», он ломается.

Akwinsky 03.12.2018 13:58

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

Clément Baconnier 03.12.2018 15:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
3
5 589
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

  2. из вложенного набора run: composer require 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. изменить базу данных / 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 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 migrate

  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

Другие вопросы по теме