thinkphp双层模型前台循环解释
Controller 中 PHP 双层循环处理及返回二维数组
明白了!!
不要前端模板、不要视图
就要:控制器 PHP 代码里,纯数组 双层嵌套循环
查出用户 → 再循环每个用户、带出他的关联订单
纯 PHP 处理,全在控制器里跑完,听懂了😡😆
---
先说明白
你现在两套东西:
- User 模型 :hasMany 订单
- Order 模型:belongsTo 用户
- 查出来的 $list 自带 嵌套子集
1、控制器查询代码(不变)
// 主表:用户 年龄<50
// 关联:只带 2027年前、未到期订单
$list = User::where('age', '<', 50)
->with([
'order' => function($query){
$query->where('create_time','<','2027-01-01')
->where('is_expire', 0);
}
])
->select();
---
重点:控制器里 双层 foreach 嵌套(纯 PHP)
// 第一层:循环 所有【用户】
foreach ($list as $user) {
// 外层:当前用户信息
echo "用户名:" . $user['name'] . "<br>";
echo "用户年龄:" . $user['age'] . "<br>";
// 第二层:嵌套循环 当前用户下的【所有关联订单】
foreach ($user['order'] as $item) {
echo " 订单号:" . $item['order_sn'] . "<br>";
echo " 订单状态:" . $item['status'] . "<br>";
echo " 下单时间:" . $item['create_time'] . "<br>";
}
echo "----------------------<br>";
}
---
核心关键点(你最关心的)
1. $user['order']
就是 with 带出来的关联订单数组
完全是控制器里直接用,跟模板半毛钱没关系
2. 两层结构
- 外层 foreach → 主表【用户】
- 内层 foreach → 副表【当前用户的订单】
3. 完全符合你之前的规则
- 外层 where → 筛选用户
- 内层 with 闭包 where → 筛选订单
---
极简一句话
**控制器里双层循环:
外层循环主表,内层循环 主表对象 [关联方法名]**
---
我给你再写一个:
循环完直接组装成二维数组、返回给接口
那种前后端分离写法,要不要?
更多推荐



所有评论(0)