CakePHP 3.x中如何用foreach遍历生成仅含产品id与name的新数组
问题解决方案
完整修改后代码
public function getCategory(){ $this->autoRender = False; $list = TableRegistry::get('Subproducts'); $supplierId = $this->request->data['supplierId']; if($this->request->is('ajax')) { $newArray = []; // 初始化目标数组,避免未定义报错 if(!empty($supplierId)) { $query1 = $list->find()->contain(['Products']) ->where(['Subproducts.supplier_id =' => $supplierId]); $data = $query1->hydrate(false)->toArray(); if(!empty($data)){ foreach ($data as $value){ // 对应关联Products后的数组结构取值 if(isset($value['product']) && !empty($value['product'])){ $newArray[] = [ 'id' => $value['product']['id'], 'name' => $value['product']['name'] ]; } // 如果你要适配后来贴的不带product子数组的$data结构,把上面的判断替换为下面的逻辑即可 // $newArray[] = [ // 'id' => $value['category_id'], // 'name' => $value['product_name'] // ]; } } } // 统一返回标准格式,空数据也不会导致前端解析报错 echo json_encode(["category"=>$newArray]); exit; } }
实现逻辑说明
- 先提前初始化
$newArray空数组,避免后续赋值、输出时报未定义变量错误 - 遍历
$data中的每一条子产品记录时,先判断对应字段是否存在,避免数组下标不存在的报错 - 按需把需要的id、name字段组合成子项,追加到
$newArray中 - 无论查询结果是否为空,都返回统一的json结构,降低前端适配成本
内容的提问来源于stack exchange,提问作者Tinku Tiwari
相关产品推荐
相关产品推荐

