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

    结束

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

    问题总比方法多啊

    要下班了,下次继续

  • 相关阅读:
    ZooKeeper 授权访问
    jQuery代码优化:事件委托篇
    设计一个学生作业完成情况的管理程序
    UVa 10192 Vacation(LCS水题)
    BBS快照源代码代写
    ftp服务器系统编程编码程序下载代写代开发
    文件夹病毒专杀工具
    C#生成软件注册码
    《恐怖丛林生存》肉搏攻略,解开星星系统之谜
    《恐怖丛林生存》各种bug 各种解密
  • 原文地址:https://www.cnblogs.com/baozi-tudou/p/12810300.html
Copyright © 2011-2022 走看看