validate()){ return $this->getModelError(); } $cat_list = Cat::find() ->where([ 'cx_mch_id' => $this->cx_mch_id, 'is_delete' => 0, 'type' => Cat::TYPE_FAQ, 'status' => 1, 'is_hide' => 0 ]) ->select('id,name,img_url') ->orderBy(['sort' => SORT_ASC, 'created_at' => SORT_DESC]) ->asArray()->all(); $faq_list = FaqMeta::find()->alias('fm') ->leftJoin(['f' => Faq::tableName()], 'f.id=fm.faq_id') ->where([ 'f.is_delete' => 0, 'f.cx_mch_id' => $this->cx_mch_id, 'f.status' => Faq::STATUS_PUBLISHED, 'fm.is_delete' => 0, 'fm.type' => FaqMeta::TYPE_CAT ]) ->select('fm.value as cat_id,f.id,f.title,f.content,f.created_at,f.published_at,f.status,f.sort,f.is_hot') ->orderBy(['f.sort' => SORT_ASC, 'f.created_at' => SORT_DESC])->asArray()->all(); foreach ($faq_list as $index => $item){ $item['created_at_cn'] = date('Y-m-d H:i:s',$item['created_at']); $item['published_at_cn'] = date('Y-m-d H:i:s',$item['published_at']); $item['status_cn'] = Faq::getStatus($item['status']); $item['cat_list'] = $this->getCatList($item['id']); $faq_list[$index] = $item; } foreach ($cat_list as $index => $item){ $item['list'] = $this->getFaqList($item['id'], $faq_list); $item['img_url'] = SiteHelper::getFullUrl($item['img_url']); $cat_list[$index] = $item; } $data = $cat_list; return $this->apiReturnSuccess("ok", $data); } private function getFaqList($cat_id, $faq_list) { $list = []; foreach ($faq_list as $index => $faq){ if(in_array($cat_id, array_column($faq['cat_list'], 'cat_id'))) $list[] = $faq; } return $list; } private function getCatList($faq_id) { $list = FaqMeta::find()->alias('fm') ->leftJoin(['c' => Cat::tableName()],'c.id=fm.value') ->where([ 'fm.is_delete' => 0, 'fm.type' => FaqMeta::TYPE_CAT, 'fm.faq_id' => $faq_id, 'c.is_delete' => 0, 'c.type' => Cat::TYPE_FAQ, ]) ->select('c.name,c.id as cat_id')->asArray()->all(); return $list; } }