Ограничить количество записей в цикле for

У меня есть модель и готовые данные в таблице. В этой модели я добавил новое поле и сделал связь с другой таблицей.

А чтобы вручную не заполнять эти поля для каждой записи, я хочу создать миграцию, которая будет автоматически заполнять это поле для всех записей.

Таблица отношений имеет два поля: 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?

Ваше объяснение меня смущает. Сколько постов у вас в базе данных? А какой номер присвоен $index?

ExecAssa 19.02.2023 23:33

@ExecAssa постов 8, $index тоже равен 8 соответственно, идея в том, чтобы заполнить все существующие посты, но проблема в том, что им теперь присваивается дополнительный author_id

broken heart 20.02.2023 00:35

Приведенный ниже код не делает ничего, кроме сброса $j в 0, когда $j больше 4. Чего вы ожидали? Это очень неясно.

ExecAssa 20.02.2023 04:13
Еще один бенчмарк PHP
Еще один бенчмарк PHP
Сегодня я наткнулся на забавный пост на r/ProgrammerHumor, который заставил меня задуматься об одной вещи, которая меня всегда интересовала....
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Laravel поставляется с мощной функцией под названием "Eloquent Accessors and Mutators".
Настройка PHP-проекта на MacOS: простое руководство для начинающих
Настройка PHP-проекта на MacOS: простое руководство для начинающих
PHP, широко используемый язык сценариев с открытым исходным кодом, необходим для веб-разработки. Его совместимость с MacOS делает его популярным...
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Запись файлов cookie в файл с помощью XSS R
Запись файлов cookie в файл с помощью XSS R
Привет всем :), здесь я продемонстрирую получение cookies, которые будут сохранены в виде txt файла, используя дефект XSS Reflected.
0
3
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
$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();
    }
}

Я немного обновил пост, основываясь на вашем ответе, но пока все работает не так, как должно.

broken heart 19.02.2023 18:04

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