carely 发表于 2023-5-11 10:43

维护一个TP7项目遇到的痛点

本帖最后由 carely 于 2023-5-12 10:07 编辑


$backpacks = CourseBackpack::where('product_id', $product_id)->whereIn('user_id', $user_ids)->select();
foreach ($backpacks as $backpack) {
    // product_json 是个json格式的字段 为什么这么设计 很是头疼
    // 数据库使用mysql 存储引擎是 InnoDB 估计关于存储结构表空间这块知识没有深入理解
    /**
   * 错误赋值
   * 重点在此处一 居然不能这么操作 foreach $bag_json
   * $bag_json = $backpack['product_json']['bag_json'] ?? [];
   */
    $product_json = $backpack['product_json'] ?? [];
    // $product_json 中又存在课包的信息
    $bag_json = $product_json['bag_json'] ?? [];
    if (empty($bag_json)) continue;
    // 循环读取课包
    foreach ($bag_json as &$bag) {
      // 获取各个章节信息
      $bar = $bag['bar'] ?? [];
      if (empty($bar)) continue;
      // 循环读取各个章节
      foreach ($bar as &$item) {
            // 修改课节信息
            $item['is_pre'] = 1;
            $item['is_free'] = 1;
      }
      $bag['bar'] = $bar;
    }
    /**
   * 错误设置值
   * 重点在此处二 居然不能这么操作
   * 运行后一直在请求 最后报错
   * 一度以为是数据量太多导致请求超时
   * 打印报错:Indirect modification of overloaded element......
   * 查资料只是说: 做foreach循环嵌套的时候报错。这个时候需要中间变量
   * $backpack['product_json']['bag_json'] = $bag_json;
   */
    $product_json['bag_json'] = $bag_json;
    $backpack['product_json'] = $product_json;
    $backpack->save();
}



$bag_json = $backpack['product_json']['bag_json'] ?? [];$backpack['product_json']['bag_json'] = $bag_json;
查资料说: 做foreach循环嵌套的时候报错。这个时候需要中间变量。但是具体底层如何报错的 有谁能解答下?
新人一枚,第一次发帖,多多包涵,java开发的,维护公司的PHP项目 框架tp7.4

905407220 发表于 2023-5-11 11:38

你这个样式看得头疼

sf4922 发表于 2023-5-11 11:44

好好看下w3c标准吧。 连标准都不尊重的人

ytw6176 发表于 2023-5-11 11:54

给点数据测测呗   还有tp7是什么鬼。。

Takitooru 发表于 2023-5-11 11:59

thinkphp??thinkphp 7什么时候出了?thinkphp 6吧?

skl520 发表于 2023-5-11 14:39

眼睛受不了,还是不看了

moyouj 发表于 2023-5-12 17:18

虽然我不太懂,但我大受震撼{:17_1065:}
页: [1]
查看完整版本: 维护一个TP7项目遇到的痛点