thinkphp5.0 多join时where无法between

情况类似于这个链接,这帖子的老哥没有答案,现在遇到一样的问题了,下面贴上代码

$map = ['products.insurance_status'=>1];//是否计算下线的产品
    if( input('get.times') && input('get.times') < 7 ){
        $time = return_times(input('get.times'));
        //此处有bug
        $map['order.pay_time'] = ['between time', [strtotime($time['start']),strtotime($time['end'])]];
    }
    $list = db('xmb_insurance_products')
            ->alias('products')
            ->field('products.*,company.company_name,count(order.id) num,sum(order.order_amount) price')
            ->join('xmb_insurance_company company', 'products.insurance_company_id=company.id', 'left')
            ->join('xmb_insurance_order order', 'order.insurance_id=products.id and order.order_status=1','left')//此处购买数,如果给了and status=1,则购买数不计入未支付的订单
            ->group('products.id')
            ->order('products.id desc')
            ->where($map)
            ->paginate(7,false,[ 'type'=> 'page\Page','var_page'=>'page','query' => $this->request->get()]);
            

结果:

clipboard.png

求助:以下语句应该如何处理好

$map['order.pay_time'] = ['between time', [strtotime($time['start']),strtotime($time['end'])]];

问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 3.4k
2 个回答

希望能对你有所帮助。
下面这段代码亲测是可以的。但是我用union就会出现和你一样的错误。

        $list = db('neworder')->alias('a')
            ->join('__MEMBERS__ m','a.mid = m.id','left')
            ->join('__MEMBERS__ s','s.id = m.id','left')
            ->whereTime('m.create_time', 'between', ['1970-10-1', '2018-10-1'])
            ->select();
        return json_encode($list);
        
  我buildsql之后的原生语句在mysql上运行也是ok的。

已解决,谢谢大佬,两个解决方法,1:不起别名,2,between

 $map = ['products.insurance_status'=>1];//是否计算下线的产品
    if( input('get.times') && input('get.times') < 7 ){
        $time = return_times(input('get.times'));
        $map['order.add_time'] = ['between', [strtotime($time['start']),strtotime($time['end'])]];
    }

    $list = db('xmb_insurance_products')
            ->alias('products')
            ->field('products.*,company.company_name,count(order.id) num,sum(order.order_amount) price')
            ->join('xmb_insurance_company company', 'products.insurance_company_id=company.id', 'left')
            ->join('xmb_insurance_order order', 'order.insurance_id=products.id and order.order_status=1','left')//此处购买数,如果给了and status=1,则购买数不计入未支付的订单
            ->group('products.id')
            ->order('products.id desc')
            ->where($map)
            ->paginate(7,false,[ 'type'=> 'page\Page','var_page'=>'page','query' => $this->request->get()]);
    $this->assign('list',$list);
    return $this->fetch();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题