[特殊字符]️ 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处理方法
🤝 多态关联支持
📊 多种数据获取方式
根据业务场景选择最适合的查询方式! 🚀