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();

    结束

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

    问题总比方法多啊

    要下班了,下次继续

  • 相关阅读:
    HDU 1711 Number Sequence
    PAT L2-016 愿天下有情人都是失散多年的兄妹
    PAT L2-024 部落
    斜率优化DP小结(含凸优化)
    jzoj 4475. 【GDOI2016模拟4.25】征途
    jzoj 6271. 2019.8.4【NOIP提高组A】锻造 (forging)
    jzoj 6273. 2019.8.4【NOIP提高组A】欠钱 (money)
    jzoj 6272. 2019.8.4【NOIP提高组A】整除 (division)
    2019.08.04【NOIP提高组】模拟 A 组 总结
    jzoj 2184. 羊羊列队
  • 原文地址:https://www.cnblogs.com/baozi-tudou/p/12810300.html
Copyright © 2011-2022 走看看