代码之家  ›  专栏  ›  技术社区  ›  neubert

在get()之后执行where()。

  •  0
  • neubert  · 技术社区  · 6 年前

    我正在尝试将新功能添加到现有的Laravel代码库中,代码库中有:

        $hasGAP = (new \App\Models\Policy)->where('leadID', $leadId)
            ->where('policystatus', '!=', 'Canceled')
            ->get()->where('product.name', 'GAP Insurance')->count() > 1;
    

    所以这是对 \App\Models\Policy 模型。它正在做 WHERE policystatus != 'Canceled' 然后得到结果。然后它在做一个 WHERE 结果如何?这对我来说没有意义。

    也, product.name 不是表中的列。事实上,这段时间( . )运算符将是非法字符。

    这段代码真的有效吗?如果有效,它实际上在做什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   DevK    6 年前

    这个 ->get() 结束查询并返回结果 collection .

    随后的 ->where(..) ->count() 然后调用集合。

    点号法在Laravel中广泛用于获取数组、对象和类似数据结构的子字段(例如: array_get() )工作在 ->where() (在收藏品上)也是。

    所以发布的代码 应该 工作。我想 Policy belongsto(或hasone)一个产品和点符号用于按相关产品名称搜索。