## 根据栏目ID获取相关的文章 做企业站时候,前台点击栏目后,查询出相关文章,在框架中是用标签来读取的,不是很灵活。我这里写了个方法,方便前台使用AJAX来调用数据! /** * 根据栏目id获取文章 * @return [json] [相关文章] */ public function getwzbycid() { $cid = $this->request->param('cid'); if (empty($cid)) { $this->error('栏目不存在!'); }else{ //1,获取下级栏目 $arr = json_decode(\app\portal\service\ApiService::allSubCategoriesCid($cid),true); $erjiid=''; foreach ( $arr as $key => $val) { if( is_array($val) ) foreach( $val as $value) $erjiid .= $value.','; } //2,查询栏目所有推荐的新闻 $field = 'a.*,b.id AS post_category_id,b.list_order,b.category_id'; $join = [ ['__PORTAL_CATEGORY_POST__ b', 'a.id = b.post_id'] ]; $portalPostModel = new PortalPostModel(); $articles = $portalPostModel->alias('a')->field($field)->join($join) ->where(function($query) use ($erjiid) { $category = $erjiid; if (!empty($category)) { $query->where('b.category_id','in',$category); } }) ->where('a.is_top','1') //置顶推荐的 ->order('update_time', 'DESC') ->select(); return json(['data'=> $articles ]); } } where有三种写法:表达式法,数组法,然后闭包法;这里使用了第三种闭包的写法! 闭包写法:where里面,是一个匿名函数。函数很熟悉,匿名函数不过是少了个函数名称。 如果条件里面需要传递参数,加上 **use (变量)**