当前位置: 首页 > news >正文

[特殊字符]️ Hyperf框架的数据库查询(ORM组件)

🛠️ Hyperf框架的数据库查询(ORM组件)
🔍 1. 查询数据的方式(查询构造器 和 模型)

// 🛠️ 查询构造器    
1. Db::select("SELECT * FROM b_order LIMIT 0,1"); // ⚡ 原生SQL
2. Db::table('b_order')->where('order_id', 1)->first(); // 🔗 链式调用

// 🎭 模型

3. MallOrders::where('order_id', 1)->first(); // 🏷️ 模型查询

💡 一般情况下:2 和 3 的情况会使用的多一点。1 的情况主要针对需要执行原生的语句

🔎 2. 查询条件
🔗 链式查询(where条件不断拼接)
php

Client::query()->where('client_id', 1)->where('enable', 1)->where('deleted_at', null)->first();

📋 条件数组(简单条件)

$where = [['client_id', '=', 1],['enable', '=', 1],['deleted_at', '=', null]
];
Client::query()->where($where)->first();

🌀 复杂条件(闭包函数)

Client::query()->where(function ($query) {return $query->where('sex', '男')->whereOr('age', '<', '18');
})->first();

📊 3. 获取数据方式
📌 单条数据
php
// 🔍 find - 返回集合|模型|null(多条/单条/没找到)

Article::query()->find($id);

// 🥇 first - 返回第一条(LIMIT 1 + ORDER BY id)

Article::query()->where('id', 5)->first();

// 🥇 last - 返回最后一条

Article::query()->where('id', 5)->last();

📚 多条数据(返回Collection)

Article::query()->get(); 
Article::query()->find(); // 注意和单条的区别

🏷️ 4. 获取字段信息
✂️ select基础用法

Article::query()->select(['id', 'name as label'])->get();

🔧 selectRaw原生表达式

Article::query()->selectRaw('id, name, created_at')->get();

🔢 获取单个值

Article::query()->value('id'); // 返回单个值

🗃️ 获取列数据
php

Article::query()->pluck('id'); // 单列数组
Article::query()->pluck('name', 'id'); // key-value形式

🧰 5. 核心功能
5.1 Collection处理

// 🎨 集合处理示例

Article::query()->get()->map(fn($item) => $item->title)->reject(fn($title) => empty($title))->groupBy('category_id');

// ➡️ 转数组

Article::query()->get()->toArray(); // 📦 转为普通数组

5.2 关联关系(多态vs JOIN)
特性 LEFT JOIN 多态关联
SQL数量 单条SQL 多条SQL(N+1问题)
关联方式 明确表连接 类型+ID间接关联
数据结构 平面表格 嵌套对象结构
适用场景 固定类型关联 动态多类型关联

// 🌈 多态关联示例

$comments = CommentModel::with('commentable')->get();
/* 返回结构:
[{id: 1,content: "好文章!",commentable_type: "Article",commentable_id: 101,commentable: {id: 101,title: "UniApp教程"}}
]
*/

💎 多态关联优势:自动处理不同类型关联,返回结构化数据,无需手动组装

🏁 总结
Hyperf ORM提供了:

🔗 灵活的链式查询

� 强大的Collection处理方法

🤝 多态关联支持

📊 多种数据获取方式

根据业务场景选择最适合的查询方式! 🚀

http://www.dtcms.com/a/263051.html

相关文章:

  • iOS 接口频繁请求导致流量激增?抓包分析定位与修复全流程
  • Reactor重试操作
  • 十大排序算法汇总
  • 2025年06月30日Github流行趋势
  • 创客匠人解析强 IP 时代创始人 IP 打造的底层逻辑与破局之道
  • Java开发新变革!飞算JavaAI深度剖析与实战指南
  • 一文讲清楚React中类组件与函数组件的区别与联系
  • 手机屏暗点缺陷修复及相关液晶线路激光修复原理
  • 类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)
  • Franka机器人赋能RoboCulture研究,打造生物实验室智能解决方案
  • Vue防抖节流
  • 最新版 JT/T808 终端模拟器,协议功能验证、平台对接测试、数据交互调试
  • Spring Cloud Bus 和 Spring Cloud Stream
  • HarmonyOS NEXT仓颉开发语言实战案例:外卖App
  • NAT 类型及 P2P 穿透
  • 人工智能和云计算对金融未来的影响
  • Docker 入门教程(九):容器网络与通信机制
  • Qt 前端开发
  • (3)pytest的setup/teardown
  • 文心大模型 4.5 系列开源首发:技术深度解析与应用指南
  • Python 数据分析与可视化 Day 12 - 建模前准备与数据集拆分
  • 【C语言 | 字符串处理】sscanf 用法(星号*、集合%[]等)详细介绍、使用例子源码
  • 嵌入式SoC多线程架构迁移多进程架构开发技巧
  • C++ std::list详解:深入理解双向链表容器
  • uniapp小程序蓝牙打印通用版(集成二维码打印)
  • 深度学习04 卷积神经网络CNN
  • 【Python】 Function
  • 计算整数二进制中1的个数
  • 障碍感知 | 基于3D激光雷达的三维膨胀栅格地图构建(附ROS C++仿真)
  • day47 注意力热图可视化