thinkphp操作数据库多种情况搜索遇到的问题

该代码实现了一个搜索功能,通过POST方法接收关键词,使用多个JOIN操作从多个数据库表中查询匹配数据。查询条件包括表名中的关键词和时间范围,并对查询结果进行处理,如添加CDN链接。同时,代码还涉及用户历史记录的插入和更新,以及数据库事务处理确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 解决办法:whereor

/**
     * @ApiTitle    (搜索功能)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="name", type="string", required=true, description="关键词")
     * @ApiReturn   ({
    "code":1,
    "msg":"返回成功"
    data:[]
    "status":1
    })
     */
    public function sousuo()
    {
        $uid = $this->auth->id;
        $name = $this->request->post('name');
        $time = date('Y-m-d',time());
        if (empty($name)) {
            $this->error('还是空空的哦', ['status' => 2]);
        }
        $data = db('drama_repertory r')
            ->join('drama_theatre t','t.id=r.t_id')
            ->join('drama_type t1','t1.id=r.type_id')
            ->join('drama_group g','g.id = r.group_id')
            ->field('r.images,r.name,r.t_id,r.type_id,r.group_id,r.starttime,r.endtime,r.minprice,g.name as group_name,t.name as theatre_name,t.area_id,t1.pid')
            ->whereOr('r.name', 'like', "%$name%")
            ->whereOr('t.name', 'like', "%$name%")
            ->whereOr('g.name', 'like', "%$name%")
            ->whereTime('endtime',$time)
            ->select();
        //dump($data);
        foreach ($data as $k => $v) {
            $data[$k]['images'] = cdnurl($data[$k]['images'],true);
            $data[$k]['starttime'] = date('Y-m-d', $data[$k]['starttime']);
            $data[$k]['endtime'] = date('Y-m-d', $data[$k]['endtime']);
            $data[$k]['area_id'] = \db('area')->where('id',$data[$k]['area_id'])->value('name');
            $data[$k]['pid'] = db('drama_type')
                ->where('id', $data[$k]['pid'])
                ->value('name');
        }
        $hid = \db('user_history')->where('keywords', $name)->value('id');
        if (empty($hid)) {
            \db('user_history')
                ->insertGetId([
                    'uid' => $uid,
                    'keywords' => $name,
                    'createtime' => time()
                ]);
        }
        Db::startTrans();
        try {
            \db('user_history')
                ->where('id', $hid)
                ->update([
                    'createtime' => time()
                ]);
            Db::commit();
        } catch (Exception $e) {
            Db::rollback();
            $this->error('连接错误', ['status' => 3]);
        }
        $this->success('获取成功', [$data, 'status' => 1]);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值