where([ 'start_time' => ['elt', time()], 'end_time' => ['egt', time()], '_string' => 'concat(",", admin_ids, ",") like "%,' . $uid . ',%"' ]) ->getField('id', true); if (empty($notices) || count($notices) == 0) { return; } $readNotices = M('admin_notice_read', 'tab_')->where(['admin_id' => $uid, 'notice_id' => ['in', $notices]])->getField('notice_id', true); $unreadNotices = $readNotices ? array_diff($notices, $readNotices) : $notices; $records = []; foreach ($unreadNotices as $noticeId) { $records[] = [ 'notice_id' => $noticeId, 'admin_id' => $uid, 'create_time' => time(), 'update_time' => time() ]; } M('admin_notice_read', 'tab_')->addAll($records); } public function read($id) { M('admin_notice_read', 'tab_')->where(['id' => $id])->save(['status' => 1, 'update_time' => time()]); } public function delete($id) { M('admin_notice_read', 'tab_')->where(['id' => $id])->save(['status' => 2, 'update_time' => time()]); } public function getAdminNotices($uid) { $items = M('admin_notice_read', 'tab_')->field(['notice_id', 'status'])->where(['admin_id' => $uid, 'status' => ['in', [0, 1]]])->order('create_time desc')->select(); if (empty($items) || count($items) == 0) { return []; } $ids = array_column($items, 'notice_id'); $notices = M('admin_notice','tab_') ->where([ 'id' => ['in', $ids], 'start_time' => ['elt', time()], 'end_time' => ['egt', time()], ]) ->select(); if ($notices) { $notices = index_by_column('id', $notices); } $records = []; foreach ($items as $item) { $notice = $notices[$item['notice_id']] ?? null; if (is_null($notice)) { continue; } $records[] = [ 'id' => $item['notice_id'], 'status' => $item['status'], 'type' => $notice['type'], 'content' => $notice['content'], 'title' => $notice['title'], 'target' => $notice['target'], ]; } return $records; } }