Laravel: заполнение вложенного накрытого стола с помощью Faker - PullRequest
0 голосов
/ 18 декабря 2018

Я использую Kalnoy / Nestedset и пытаюсь заполнить таблицу комментариев с помощью фейкера, но получаю ошибку «Преобразование массива в строку».

Таблица комментариев выглядит следующим образом:

Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('user_id');
            $table->unsignedInteger('post_id');
            $table->text('body');
            $table->timestamps();
            $table->nestedSet();
        });

Фабрика комментариев:

use Faker\Generator as Faker;

$factory->define(
    App\Models\Comment::class,
    function (Faker $faker) {
        return [
        'user_id' => function () {
            return factory('App\Models\User')->create()->id;
        },
        'post_id' => function () {
            return factory('App\Models\Post')->create()->id;
        },
        'body' => $faker->paragraph,
        ];
    }
); 

И я не могу понять, как должна выглядеть сеялка.Вот моя попытка:

public function run(Post $post)
    {
        $node = factory('App\Models\Comment'::class, 3)->create([

            'children' => [
                [
                    factory('App\Models\Comment'::class, 2)->create([
                        'post_id' => $post->id
                    ]),

                    'children' => [
                        [ factory('App\Models\Comment'::class, 1)->create([
                        'post_id' => $post->id
                            ]), 
                        ],
                    ],
                ],
            ],
        ]);
    }

}

Я также хочу удостовериться, что идентификатор записи потомков такой же, как и у родителя, но теперь он возвращает ноль.

1 Ответ

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

Ключами массива в методе create должны быть атрибуты, существующие в вашей модели.В вашем случае children не является атрибутом модели Comment.

Используя пример из документации Использование фабрики , вы можете создать каждый комментарий и затем использовать children() отношения по новым моделям для создания своих детей.Например:

public function run(Post $post)
{
    $node = factory('App\Models\Comment'::class, 3) // Create the root comments.
            ->create()
            ->each(function ($comment) use ($post) { // Add children to every root.
                $comment->children()->saveMany(factory(App\Comment::class, 2)->make([
                    'post_id' => $post->id
                ]))
                ->each(function ($comment)  use ($post) { // Add children to every child of every root.
                     $comment->children()->saveMany(factory(App\Comment::class, 2)->make([
                        'post_id' => $post->id
                    ]));
                });
            });
...