## 根据栏目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 (变量)**