跳到主要内容
PHP

thinkphp中where与whereOr混写的问题

管

管理员

PHP

2020年02月12日 10,222 次阅读
本页目录
刚学thinkphp6,在写一段功能中需要用到以下语句:
$where[] = ['level', '=', 1];
$where[] = ['level', '=', 2];
$user = UserModel::where('username',1)
        ->whereOr($where)
        ->select();
理想中的sql应该为:

^ "SELECT * FROM `tp_user` WHERE `username` = 1 and (`level` = 1 OR `level` = 2")
但实际的SQL语句为:
^ "SELECT * FROM `tp_user` WHERE `username` = 1 OR `level` = 1 OR `level` = 2"

解决:遇到whereOr和where组合链式操作使用闭包条件统一写到闭包里面 会自动加上括号.
改写链式查询条件为以下:
            $user = UserModel::where(function ($query) use ($where) {
                    $query->whereOr($where)
            })
                    ->select();

原因分析:
              where里面的条件是 && 的关系,whereOr里面的条件是 | | 的关系,

Related

相关文章

同分类文章 →
2026年07月11日 PHP

laravel什么样的方法适合放在模型中?什么适合用专门的服务类? cachedFavIds适合放在模型中吗?

一、适合放在模型中的方法Laravel 采用 ActiveRecord 风格,模型本身就是"数据 + 围绕该数据的操作"的载体。以下几类方法适合放模型: 关联关系:belongsTo、morphTo、hasMany 等。如 UserFav::userfavable()、UserFav::us

2026年04月13日 PHP

Vue3 静态文件放在同域名 Laravel 项目下

核心思路是:Vue3 构建后的静态文件放到 Laravel 的 public/ 目录下,通过 Laravel 路由的 catch-all 机制让 SPA 的前端路由正常工作。方案说明以 xx.com/admin 为例,整体架构如下:请求流程:xx.com/admin/* → Laravel

2025年08月18日 PHP

Laravel Eloquent 中可以通过静态方式调用的方法

在 Laravel Eloquent 中,可以通过静态方式调用的方法包括:1. 查询作用域 (Scopes)// 可以静态调用UserComment::active()->get();UserComment::where('status', 1)->first();2. Eloquent 内置的查询方法UserComment::fi

WeChat

扫码加我微信

微信二维码