在使用fastadmin做二开时,遇到一个问题,网上查了一下也有其他人遇到这种问题,但是没人写出解决方案。研究后自认为达到了我的需求,所以记录一下防止忘记。
数据库中有个clubid,有2种状态,0是用户,大于0 的是俱乐部id,没有其它字段区分到底是用户或者俱乐部。
想在搜索的时候,能单独查出那些事用户,哪些是俱乐部
首先是页面js,设置visible:false,不在列表显示。searchList,下拉显示的分类。
{field: 'club.title', title: __('俱乐部') , operate: 'LIKE'},
{field: 'clubid', title:'动态分类', visible:false , searchList: {0: "用户", 1: "俱乐"}},
然后在控制器的index方法中修改。接收提交的参数,判断参数clubid是否存在,如果存在,就是使用了分类查询,在判断传输的值,0就是用户,1就是俱乐部
$filter = input('filter');
$clubSearch = 0;
$clubSearchValue = '0';
if ($filter) {
$filter = urldecode($filter);
$filter = json_decode($filter, TRUE);
foreach ($filter as $k => $v) {
$where[$k] = ['like', "%{$v}%"];
if ($k == 'club_id') {
$clubSearch = 1;
$clubSearchValue = $v;
}
}
}
if ($clubSearch) {
if ($clubSearchValue == 0) { //查询用户
$list1->where('hq_sq_news.club_id', '=', 0);
} else {
$list1->where('hq_sq_news.club_id', '>', 0);
}
}
下面是完整代码
public function index()
{
//设置过滤方法
$data = $this->request->filter(['strip_tags', 'trim']);
if ($this->request->isAjax()) {
$filter = input('filter');
$clubSearch = 0;
$clubSearchValue = '0';
if ($filter) {
$filter = urldecode($filter);
$filter = json_decode($filter, TRUE);
foreach ($filter as $k => $v) {
$where[$k] = ['like', "%{$v}%"];
if ($k == 'club_id') {
$clubSearch = 1;
$clubSearchValue = $v;
}
}
}
//如果发送的来源是Selectpage,则转发到Selectpage
if ($this->request->request('keyField')) {
return $this->selectpage();
}
list($where, $sort, $order, $offset, $limit) = $this->buildparams();
$list1 = $this->model->with(['user', 'club', 'activity']);
if ($clubSearch) {
if ($clubSearchValue == 0) { //查询用户动态
$list1->where('hq_sq_news.club_id', '=', 0);
} else {
$list1->where('hq_sq_news.club_id', '>', 0);
}
}
$list = $list1->where($where)
->order($sort, $order)
->paginate($limit);
foreach ($list as $k => $v) {
// $nickname = model('user')->where('id',$v->user_id)->value('nickname');
$v->nickname = rawurldecode($v['user']['nickname']);
// $club = new Club();
// $v->clubname = $club->where('id',$v->club_id)->value('title');
// $v->activityname = model('activity')->where('id',$v->activity_id)->value('title');
}
$result = array("total" => $list->total(), "rows" => $list->items());
return json($result);
}
return $this->view->fetch();
}