我在表中有一个模型和现成的数据.在这个模型中,我添加了一个新字段,并与另一个表建立了连接.

为了不 for each 记录手动填写这些字段,我想创建一个迁移,它将自动为所有记录填写此字段.

关系表有两个字段:post_id和Author_id.

我正试着这样做:

$posts = Posts::find()->all();

foreach ($posts as $index => $post) {
    for($i = 0, $j = 0; $i < $index; $j++, $i++) {
        if ($j >= 4) {
          $j = 0;
        }
        $item = new PostAuthor();
        $item->setAttribute('post_id', $posts->id);
        $item->setAttribute('author_id', $j + 1);
        $item->save();
    }
}

一切也都正常工作,但有一个问题,当计数器达到4时,则从1开始将作者id再次添加到相同的帖子中.

我附上了一个截图,什么不应该被圈住,当计数器达到4时,帖子就不需要再添加作者ID了

enter image description here

推荐答案

因为

if ($j >= 4) {
  $j = 0;
}

除了设置$j = 0,什么都不做.循环按原样进行.

如果您希望循环在此处停止,则有两种 Select :

f或each ($posts as $index => $post) {
    f或($i = 0, $j = 0; $i < $index; $j++, $i++) {
        if ($j >= 4) {
          break;
        }
        // ...
    }
}

f或each ($posts as $index => $post) {
    f或($i = 0, $j = 0; $i < $index, $j < 4; $j++, $i++) {
        // ...
    }
}

尽管在这一点上,$i$j在功能上是相同的,您可以简单地丢弃它们中的一个,并在循环边界条件中放置&&.

f或each ($posts as $index => $post) {
    f或($i = 0; $i < $index && $i < 4; $i++) {
        // ...
    }
}

Php相关问答推荐

如何在Livewire中验证多个 Select 字段

获得客户S在WooCommerce为期1年的总支出

PHP FFI—将PHP数组转换为C指针数组

照明\Support\Collection::Filter():参数#1($Callback)的类型必须为?可调用、已给定数组、已调用

从WooCommerce购物车和 checkout 页面自定义发货标签

PHP中的圆生成器在国际日期变更线上失败

Laravel;Composer安装突然返回选项快捷方式不能为空.

如何限制WordPress自定义分类术语页面中的术语数量

在WooCommerce中添加基于类别的固定费用

WordPress插件和JSON不是有效的响应错误

如果日期是过go 日期,则隐藏事件发布类型

Wordpress,配置一周第一天选项

对 WooCommerce 购物车和 checkout 中显示的运输方式进行排序

WooCommerce 回购自定义插件:如何更新用户钱包?

Laravel auth()->id() 在生产服务器中不工作

如何使用动态变量定义 bind_result?

如何用 php ML 解决这个问题?

我试图在我的视图上显示从数据库中获取的数据,但我无法显示它.拉维尔 10.x /

如何故意创建不同的错误(404,500,419)? Lavravel PHP

来自命令行的 PHP 没有给出正确的结果