123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- // +----------------------------------------------------------------------
- // | ThinkCMF [ WE CAN DO IT MORE SIMPLE ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2013-2017 http://www.thinkcmf.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Author: pl125 <xskjs888@163.com>
- // +----------------------------------------------------------------------
- namespace api\portal\service;
- use api\portal\model\PortalPostModel;
- use think\db\Query;
- class PortalPostService
- {
- //模型关联方法
- protected $relationFilter = ['user'];
- /**
- * 文章列表
- * @param $filter
- * @param bool $isPage
- * @return array|string|\think\Collection
- * @throws \think\db\exception\DataNotFoundException
- * @throws \think\db\exception\ModelNotFoundException
- * @throws \think\exception\DbException
- */
- public function postArticles($filter, $isPage = false)
- {
- $join = [];
- $field = empty($filter['field']) ? 'a.*' : explode(',', $filter['field']);
- //转为查询条件
- if (is_array($field)) {
- foreach ($field as $key => $value) {
- $field[$key] = 'a.' . $value;
- }
- $field = implode(',', $field);
- }
- $page = empty($filter['page']) ? '' : $filter['page'];
- $limit = empty($filter['limit']) ? '' : $filter['limit'];
- $order = empty($filter['order']) ? ['-update_time'] : explode(',', $filter['order']);
- $category = empty($filter['category_id']) ? 0 : intval($filter['category_id']);
- if (!empty($category)) {
- array_push($join, ['__PORTAL_CATEGORY_POST__ b', 'a.id = b.post_id']);
- $field = $field.',b.id AS post_category_id,b.list_order,b.category_id';
- }
- $orderArr = order_shift($order);
- $portalPostModel = new PortalPostModel();
- if (!empty($page)) {
- $portalPostModel = $portalPostModel->page($page);
- } elseif (!empty($limit)) {
- $portalPostModel = $portalPostModel->limit($limit);
- } else {
- $portalPostModel = $portalPostModel->limit(10);
- }
- $articles = $portalPostModel
- ->alias('a')
- ->field($field)
- ->join($join)
- ->where('a.create_time', '>=', 0)
- ->where('a.delete_time', 0)
- ->where('a.post_status', 1)
- ->where(function (Query $query) use ($filter, $isPage) {
- if (!empty($filter['user_id'])) {
- $query->where('a.user_id', $filter['user_id']);
- }
- $category = empty($filter['category_id']) ? 0 : intval($filter['category_id']);
- if (!empty($category)) {
- $query->where('b.category_id', $category);
- }
- $startTime = empty($filter['start_time']) ? 0 : strtotime($filter['start_time']);
- $endTime = empty($filter['end_time']) ? 0 : strtotime($filter['end_time']);
- if (!empty($startTime)) {
- $query->where('a.published_time', '>=', $startTime);
- }
- if (!empty($endTime)) {
- $query->where('a.published_time', '<=', $endTime);
- }
- $keyword = empty($filter['keyword']) ? '' : $filter['keyword'];
- if (!empty($keyword)) {
- $query->where('a.post_title', 'like', "%$keyword%");
- }
- if ($isPage) {
- $query->where('a.post_type', 2);
- } else {
- $query->where('a.post_type', 1);
- }
- if (!empty($filter['recommended'])) {
- $query->where('a.recommended', 1);
- }
- if (!empty($filter['ids'])) {
- $ids = str_to_arr($filter['ids']);
- $query->where('a.id', 'in', $ids);
- }
- })
- ->order($orderArr)
- ->select();
- return $articles;
- }
- }
|