zoukankan      html  css  js  c++  java
  • tp5.1 hasWhere

    起因

    工作中习惯使用模型关联查询数据,因为模型关联之后返回的数据可以是一对多的数组,使用join链表查询则是返回多条数据,使用模型关联就少不了对关联的模型进行查询

    问题及解决

    还是上代码说明

    这是一个规格表关联商品

    $sku = ProdSku::with('skuProd')->where([
                ['barcode', '=', $barcode],
                ['prodid', '<>', $prodid]
            ])->find();

    如果要对商品属性进行筛选

    $sku = ProdSku::with('skuProd'=>function($q){
          $q->where('status','in',[0,1]); // 对商品状态进行查找
        })->where([
                ['barcode', '=', $barcode],
                ['prodid', '<>', $prodid]
            ])->find();   

    其实还有一种写法 使用hasWhere 需要注意的是 haswhere只有静态方法 没有->

    $sku = ProdSku::hasWhere('skuProd',['status'=>1])
                ->where([
                ['barcode', '=', $barcode],
                ['prodid', '<>', $prodid]
            ])->fetchSql(true)->find();

    但是对比之后,发现使用haswhere 时 如果where部分是数组, 就只能是 等于 操作,例如状态等于1

    但是我想要的状态是 在某个范围内,例如 in

    就只能使用闭包

    $sku = ProdSku::hasWhere('skuProd',function($q){
                $q->where('status','in',[1,0]);
            })
                ->where([
                ['barcode', '=', $barcode],
                ['prodid', '<>', $prodid]
            ])->fetchSql(true)->find();

    一看这种写法没问题啊,但是还是会报错,说是status两个表都有,不知道是查哪一个

    经过尝试之后发现, 需要在status前面加上它所属的模型名称

    $sku = ProdSku::hasWhere('skuProd',function($q){
                $q->where('ProdMain.status','in',[1,0]);
            })
                ->where([
                ['barcode', '=', $barcode],
                ['prodid', '<>', $prodid]
            ])->find();

    结束

    以上只是对单个关联条件的筛选,如果是多个关联添加呢,例如我的产品及关联了分组又关联了规格,既要根据分组筛选,又要根据规格筛选该怎么办

    问题总比方法多啊

    要下班了,下次继续

  • 相关阅读:
    VS2019基于windows类库创建单元测试报错解决方法
    scp 跨机远程拷贝
    java递归查询部门
    使用jOrgChart插件生成树形图
    让你页面上所有的非http请求强制转成https请求
    js对金额格式化————脑子不好使总忘
    去除相邻的重复元素 122345556 -> 123456
    打包时无法引入外部jar
    计算list里连续出现的值
    VirtualBox安装Centos双网卡(访问外网+固定IP)
  • 原文地址:https://www.cnblogs.com/baozi-tudou/p/12810300.html
Copyright © 2011-2022 走看看