You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何实现Transaction多条件查询 同时返回request和transfer类型记录

问题原因分析
  • 作用域错误:你定义的$transactionType数组在闭包外部,但是闭包的use语句只引入了$request变量,没有传入$transactionType,闭包内无法访问该数组,导致第二个判断逻辑不生效。
  • 逻辑错误:Eloquent查询构造器的where方法默认使用AND连接条件,叠加两个where相当于要求transactionType同时等于request和transfer,不存在符合该条件的记录。同时你在第一个if分支里直接return $query,后续代码完全不会执行,只会生效第一个查询条件。
  • 语法错误:第一个in_array判断末尾多写了一个右括号,会触发语法报错。
解决方案

最优实现:使用whereIn方法

针对查询字段值在指定数组范围内的场景,Laravel提供了原生的whereIn方法,代码最简洁高效:

$transactionType = ['request','transfer'];
$transactions = Transaction::whereIn('transactionType', $transactionType)->get();

闭包动态条件实现(适用于需要额外逻辑判断的场景)

如果确实需要通过闭包动态拼接条件,调整作用域引入、逻辑连接符、去掉提前return即可:

$transactionType = ['request','transfer'];
$transactions = Transaction::where(function ($query) use ($request, $transactionType) {
    if (in_array("request", $transactionType)) {
        $query->orWhere('transactionType', 'request');
    }
    if (in_array("transfer", $transactionType)) {
        $query->orWhere('transactionType', 'transfer');
    }
})->get();

闭包内的多个orWhere会被自动用括号包裹,不会影响闭包外的其他AND查询条件。

内容的提问来源于stack exchange,提问作者Aman Jat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:15:06