Использование количества моделей в фабрике Laravel

У меня отношения "один ко многим" между User и Post. Я использую сеялку базы данных и фабрику для создания поддельных данных. Я хотел бы получить аналогичные данные для следующих таблиц.

Пользователь

user_id | name
------- | ------
   1    | Tim

Опубликовать

post_id |  FK:user_id  | order 
--------|--------------|-------
   1    |       1      |   0  
   2    |       1      |   1   
   3    |       1      |   2   
   4    |       1      |   3   

Для этого я создал фабрику, которая выбирает случайного пользователя и подсчитывает количество сообщений, связанных с этим пользователем.

$factory->define(App\Post::class, function (Faker\Generator $faker) {

  $user = App\User::inRandomOrder()->firstOrFail();
  $order = Post::where(['user_id' => $user->user_id])->count();

  return [
    'user_id' => $user->user_id,
    'order' => $order,
  ];
});

Посев 2 поста производит.

post_id |  FK:user_id  | order 
--------|--------------|-------
   1    |       1      |   0   
   2    |       1      |   0     

Посев еще 2

   3    |       1      |   2   
   4    |       1      |   2   

Мне кажется, что Laravel генерирует все операторы вставки перед запуском запроса. Таким образом, Post::where(['user_id' => $user->user_id)->count(); не увеличивается, как ожидалось.

Как увеличить Post.order, чтобы это всегда было следующее число в последовательности для конкретного пользователя?


person Marc Barbeau    schedule 26.05.2017    source источник


Ответы (1)


Вы всегда можете засеять свои данные в цикле.

for ($i = 0; $i < 10; $i++) {
    factory(App\Post::class)->create();
}

С помощью приведенного выше вы пытаетесь вставить 10 новых объектов Post. Последовательность будет автоматически увеличиваться для каждой из этих вставок.

person ayip    schedule 27.05.2017
comment
Вы можете уточнить этот ответ? как здесь $ i используется для увеличения столбца заказа? - person vikrant; 29.10.2020