首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel雄辩的whereIn与where内部关系

在Laravel中,Eloquent ORM 提供了一种非常流畅和强大的方式来构建和执行数据库查询。whereInwhere 是用于构建查询条件的两种常用方法。虽然它们在功能上有所不同,但它们都是构建SQL查询的一部分,并且在内部都使用 Laravel 的查询构建器。

where 方法

where 方法是最基本的方法之一,用于添加一个WHERE条件到查询中。它可以非常灵活地使用,支持多种参数形式,例如:

代码语言:javascript
复制
// 基本用法
$query->where('column', '=', 'value');

// 简化用法,默认为等于
$query->where('column', 'value');

// 闭包用法,用于更复杂的条件
$query->where(function ($query) {
    $query->where('column', 'value')
          ->orWhere('another_column', 'another_value');
});

whereIn 方法

whereIn 方法专门用于构建 IN 类型的SQL查询,这是一种特定类型的 where,用于指定列的值必须包含在指定的数组中:

代码语言:javascript
复制
// whereIn用法
$query->whereIn('column', [1, 2, 3]);

这将生成类似于以下的SQL语句:

代码语言:javascript
复制
sql复制SELECT * FROM table WHERE column IN (1, 2, 3);

内部关系和实现

在内部,wherewhereIn 都是通过 Laravel 的查询构建器实现的。whereIn 实际上是 where 方法的一个特殊情况,它简化了在查询中使用 IN SQL表达式的过程。

  • 查询构建器:Laravel 的查询构建器 (Illuminate\Database\Query\Builder) 提供了一个灵活的系统来动态构建查询。它维护了一个条件列表,这些条件最终会被编译成最终的SQL语句。
  • 方法实现where 方法可以处理多种类型的参数,并根据这些参数构建相应的SQL片段。而 whereIn 方法则专门处理数组参数,并生成 IN 子句。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Postgresql内部缓存与OS缓存的关系

postgresql内部缓存与OS缓存 1 pgsql数据与日志刷盘 mysql通常使用odirect使数据绕过OS缓冲区落盘,wal还是使用系统缓冲。这样数据的写盘不会造成系统刷脏抖动。...在pgsql中数据是与OS缓冲绑定的,自己没有做字节对齐,也不使用odirect的方式直写设备,社区对数据直写的态度也一直很悲观,原因是之前也做过很多探索,结果都不是很好: link 在pgsql中数据到磁盘上会经历两层缓存...: 对比下mysql来看,数据绕过VFS缓存,日志使用VFS缓存 2 pgsql查看内部缓存和OS缓存 使用缓存的原因肯定是因为磁盘慢,参考下面数据有个直观的感受 http://blog.codinghorror.com...文件系统架构 文件系统架构抽象 在PgSQL中,读写数据文件不使用O_DIRECT,数据文件落盘依赖OS的缓冲区,与自身SHAREDBUFFER形成两层缓冲的架构。...Page Cache是内核与存储介质的重要缓存结构,当我们使用write()或者read()读写文件时,假如不使用O_DIRECT标志位打开文件,我们均需要经过Page Cache来帮助我们提高文件读写速度

54230
  • php之laravel学习常见错误3(连载中)

    下面是我们整理的php的laravel学习的常见的错误以及解决的办法,我还会持续更新,请关注 ---- ---- ## 错误1: 错误代码: No message 错误原因: 查看这个路由参数,缺少参数...中添加src ---- ---- ## 错误3: 错误代码: Invalid argument supplied for foreach() (View: D:\Laravel\resources...\views\Personal\qtspace.blade.php) 错误原因: sql错误 解决办法: 将 Blog::where('user_id',$user_id)->whereIn('accessable...',['public','protected'])->toSql() 改为 Blog::where('user_id',$user_id) ->whereIn('accessable',['public...\LARAVEL123\Test\Reals\View \Foo\FACE.BLADE.PHP 解决办法: 解析错误:语法错误、意想不到的“$DATA”(TY变量)、期望“、”或“”(视图:D:\ SHIXXIIA

    97710

    laravel 学习之路 数据库操作 查询数据

    运行 Select 查询 你可以使用 DB Facade 的 select 方法来运行基础的查询语句我们在上面创建的路由里增加个 index 的路由 dump 是 laravel 的打印函数可以把它理解为...传递给 select 方法的第一个参数就是一个原生的 SQL 查询,而第二个参数则是需要绑定到查询中的参数值。通常,这些值用于约束 where 语句。参数绑定用于防止 SQL 注入。...testId = :id', ['id' => 1]); dump($binding); } 查询构造器 Laravel 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口...它可用于执行应用程序中大部分数据库操作,且可在所有支持的数据库系统上运行。 Laravel 的查询构造器使用 PDO参数绑定来保护您的应用程序免受 SQL 注入攻击。...($data); } sql 中还有个 IN 的用法 laravel 中就是 whereIn() 第一个参数还是字段名第二个参数是数组 function getList() {

    3.2K20

    laravel 模型Eloquent ORM 查询

    up前面玩了 DB 查询,但是laravel开发基本不怎么使用db方式查询,应该有更强大的 模型 Model 介绍 Laravel 的 Eloquent ORM 提供了一个漂亮、简洁的 ActiveRecord...每个数据库表都有一个对应的「模型」用来与该表交互。你可以通过模型查询数据表中的数据,以及在数据表中插入新记录。 在开始之前,请确保在 config/database.php 中配置数据库连接。...laravel 的 Model 使用先进的 Eloquent ORM 但也有优缺点 优点是数据库的操作变的简单安全 缺点也明显数据库的操作变的缓慢笨重 Eloquent ORM 作为 laravel 中亮点...Eloquent 派生,改为由 BaseModel 派生,就不用特殊指定表名,表名与模型名称直接一致,也不再驼峰呀什么的了。...$TestMdl->select('id', 'title', 'describe') ->where('title', '', '文章1') ->whereIn

    4.4K10

    跟我一起学Laravel-数据库操作和查询构造器

    wehere条件 OR条件 其它where条件 whereBetween / whereNotBetween whereIn / whereNotIn whereNull / whereNotNull...使用sql语句执行插入 基本插入操作 更新操作 使用sql语句执行更新操作 基本更新操作 指定列的增减 删除操作 使用sql执行删除 基本删除操作 悲观锁 事务处理 查看日志记录 其它操作 在Laravel...中执行数据库操作有两种方式,一种是使用\DB外观对象的静态方法直接执行sql查询,另外一种是使用Model类的静态方法(实际上也是Facade的实现,使用静态访问方式访问Model的方法,内部采用了__...参数与union相同。...sql查询有效,对Eloquent ORM同样有效,因为它内部也是调用了DB类的数据库连接。

    6.3K30

    laravel生成无限级分类

    尤其当分类数据和层级多时,一个糟糕的算法将使服务器不堪重负 以下用laravel实现无限级分类功能,包括: 数据表设计 填充模拟数据 生成分类树 分类树的后台维护 数据表设计 字段名 描述 id 主键id...,我们经常需要获取一个分类的所有祖先类目或者后代类目,以及判断两个类目是否存在层级关系。...目录树 场景1:查询蓝牙耳机的所有祖先类目 根据path字段的值获取其祖先id为[1, 2],用 Category::whereIn('id', [1, 2])->orderBy('level')->get...() 即可获取结果 场景2:查询手机配件的所有后代类目 将id字段追加到path字段,得到-1-, 用Category::where('path', 'like', '-1-%')->get() 即可获取结果...场景3:判断移动电源与蓝牙耳机是否有层级关系 $highLevelPath = '-1-2'; // 蓝牙耳机的path $lowLevelPath = '-1-' . '4-'; // 移动电源的path

    2.9K40

    开源推荐 - 极简+高性能+分布式框架,可运行于多种环境(apachephp-fpm,swoole)

    常规web/app后端服务器 im即时通讯服务器 tcp/udp物联网服务器 综合性项目,各种混合协议通讯 背景 在用过 laravel 框架,发现它的 路由 和 数据库ORM 确实非常好用,但是整体确实有点慢...于是打算做一个拥有非常好用的路由和orm又非常简单的框架。所以你会发现one框架的 路由 和 ORM 有laravel的影子。...但也有一些自己的特色,例如 ORM 支持自动化缓存(自动化读、写、刷新)保持与数据库同步,对外使用无感知。one框架也支持在fpm下运行,在 fpm 下框架自身整体耗时在1ms左右。...class User extends Model { // 定义模型对应的表名 CONST TABLE = 'users'; // 定义关系 public function articles...with('articles')->findAll()->toArray(); // 更新 $r = $user->update(['name' => 'aaa']); // 或者 $r = user::where

    67830

    Elasticsearch搜索引擎在高性能PHP框架webman快速调用

    所以单独构建一个依赖官方客户端的插件,用户只需要传入关键字即可,后面增加了类似于关系型数据库的链式操作方法,用起来更简单一些。...当然,本插件只能满足一些常用的功能需求,较为复杂的需求仍然需要手动构建请求体,你可以使用本插件 直接调用官方客户端的方法。...:https://blog.csdn.net/weixin_44364444/article/details/125758975 基本配置 支持thinkPHP,laravel,webman等常用框架,...查询数据链式操作 */ $result = $client /** 设置表名 */ ->table('index','_doc') /** must限制条件 */ ->where...(['title','=','测试']) /** whereIn查询 */ ->whereIn('age',[28]) /** whereNotIn查询 */ ->whereNotIn

    9310

    laravel-nestedset:多级无限分类正确姿势

    laravel-nestedset是一个关系型数据库遍历树的larvel4-5的插件包 目录: Nested Sets Model简介 安装要求 安装 开始使用 迁移文件 插入节点 获取节点 删除节点...嵌套集合模型 安装要求 PHP>=5.4 laravel>=4.1 v4.3版本以后支持Laravel-5.5 v4版本支持Laravel-5.2、5.3、5.4 v3版本支持Laravel-5.1 v2...版本支持Laravel-4 强烈建议使用支持事物功能的数据引擎(像MySql的innoDb)来防止可能的数据损坏。...的相邻节点 $neighbor必须存在,$node可以为新创建的节点,也可以为已存在的,如果$node为已存在的节点,它将移动到新的位置与$neighbor相邻,必要时它的父级将改变。...值重复的节点的数量 wrong_parent -- left 和 rgt 值 与parent_id 不对应的造成无效parent_id 的节点的数量 missing_parent -- 含有parent_id

    3.5K20

    orm 系列 之 Eloquent演化历程1

    Eloquent Eloquent是laravel中的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...初始化 Eloquent首先要对数据库连接做抽象,于是有了Connection类,内部主要是对PDO的一个封装,但是如果只有Connection的话,一个问题是,我们需要直面sql,于是就有了Builder...此时关系处理上主要的逻辑是调用Model的HasOne等表关系的方法,返回Relation的子类,然后通过Relation来处理进而返回数据,这么说可能有点绕,我们下面具体介绍下每个关系的实现,大家可能就理解了...query->whereIn($this->foreignKey, $this->getKeys($models)); } public function initRelation(array $models...Users,需要加载Phones的,如果不采用eager,在每个sql就是where user_id=?

    1.1K30
    领券