Sushi 🍣 — Eloquent 的“数组”驱动器
sushiEloquent's missing "array" driver.项目地址:https://gitcode.com/gh_mirrors/su/sushi
在 Laravel 中,有时候您想使用 Eloquent ORM,但又不想处理数据库。这就是 Sushi 能派上用场的地方。它让 Eloquent 模型直接操作静态数据数组,如同它们是来自实际数据库的记录。
安装与使用
通过简单的 composer require calebporzio/sushi
命令,您可以快速安装这个包。然后,只需两步,即可将您的模型转换为无数据库模式:
- 在模型中引入
Sushi
特性。 - 在模型中定义一个
$rows
属性,存储您的数据。
以下是一个示例:
class State extends Model
{
use \Sushi\Sushi;
protected $rows = [
[
'abbr' => 'NY',
'name' => '纽约',
],
// 更多数据...
];
}
现在,你可以像操作常规 Eloquent 模型一样,查询和获取这些数据了:
$stateName = State::whereAbbr('NY')->first()->name;
关系管理
即使在没有数据库的情况下,Sushi 也支持关系定义。例如,创建一个基于数组的 Role
模型,可以与其他标准模型建立关联,如 User
模型。这意味着您可以执行诸如关联、加载关系等操作,就像在传统数据库环境中一样。
动态数据源与缓存
您可以通过自定义 getRows()
方法来实现动态数据源。比如,从远程 API 获取数据。如果选择自定义数据获取方法,还可以控制 Sushi 是否缓存数据以及如何确定缓存是否过期。
自定义架构
对于更复杂的数据结构,您可以使用 $schema
属性或 getSchema()
方法来定义字段类型。这允许您精细控制模型的行为,即使数据不是来自传统的数据库表。
如何工作
Sushi 内部会为每个模型创建并缓存一个 SQLite 数据库。当无法缓存时,它会退化到内存中的 SQLite 数据库。这样保证了无数据库的数据操作体验仍然接近于数据库操作。
应用场景
Sushi 非常适合用来处理固定不变或更新不频繁的数据,如国家、地区、角色、权限等数据。此外,用于模拟测试数据或者处理来自非数据库源的静态数据也非常适用。
技术亮点
- 不依赖数据库,轻量级解决方案。
- 支持 Eloquent 查询语句,包括关系操作(除
whereHas
外)。 - 可自定义数据获取逻辑,支持实时数据。
- 提供缓存机制,确保性能。
- 支持字符串作为主键。
- 易于集成到现有 Laravel 项目。
总的来说,Sushi 是一个创新的解决方案,为那些希望利用 Eloquent 简洁性和灵活性,但不需要传统数据库环境的应用提供了一种新的途径。立即尝试,并享受 Eloquent 编程带来的便利吧!
sushiEloquent's missing "array" driver.项目地址:https://gitcode.com/gh_mirrors/su/sushi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考