У меня есть модель и готовые данные в таблице. В этой модели я добавил новое поле и сделал связь с другой таблицей.
А чтобы вручную не заполнять эти поля для каждой записи, я хочу создать миграцию, которая будет автоматически заполнять это поле для всех записей.
Таблица отношений имеет два поля: post_id и author_id.
$posts = Posts::find()->all();
foreach ($posts as $index => $post) {
for($i = 0; $i < $index; $i++ ) {
$item = new PostAuthor();
$item->setAttribute('post_id', $posts->id);
$item->setAttribute('author_id', $i+1);
$item->save();
}
}
Теперь все работает так, что максимальное количество author_id будет равно количеству постов, т.е. для первого поста это будет author_id: 1, для второго author_id: 1 и author_id: 2, и так до 6 author_id.
Могу ли я ограничить $index так, чтобы максимальное число здесь было 4, и когда author_id достигает 4, цикл начинается с 1?
@ExecAssa постов 8, $index тоже равен 8 соответственно, идея в том, чтобы заполнить все существующие посты, но проблема в том, что им теперь присваивается дополнительный author_id
Приведенный ниже код не делает ничего, кроме сброса $j в 0, когда $j больше 4. Чего вы ожидали? Это очень неясно.
$posts = Posts::find()->all();
foreach ($posts as $index => $post) {
for($i = 0; $j=0; $i < $index; $i++ ) {
if ( $j > 4 ) {
$j = 0;
}
$item = new PostAuthor();
$item->setAttribute('post_id', $posts->id);
$item->setAttribute('author_id', $j+1);
$item->save();
}
}
Я немного обновил пост, основываясь на вашем ответе, но пока все работает не так, как должно.
Ваше объяснение меня смущает. Сколько постов у вас в базе данных? А какой номер присвоен $index?