У меня отношения "один ко многим" между 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
, чтобы это всегда было следующее число в последовательности для конкретного пользователя?