involix / sushi
Eloquent 缺失的 "array" 驱动器。
资助包维护!
calebporzio
Requires
- php: ^7.1.3
- illuminate/database: ^5.8 || ^6.0
- illuminate/support: ^5.8 || ^6.0
Requires (Dev)
- orchestra/database: 3.8.* || 3.9.* || ^4.0
- phpunit/phpunit: ^7.5 || ^8.4 || ^9.0
This package is auto-updated.
Last update: 2024-09-05 07:28:04 UTC
README
Eloquent 缺失的 "array" 驱动器。
有时你想使用 Eloquent,但又不想处理数据库。
此包是赞助软件 💰💰💰
最初,这个包仅在我的 GitHub Sponsors 赞助者中可用,直到我达到 75 个赞助者。
现在我们已经达到目标,这个包现在是完全开源的。
享受吧,感谢您的支持! ❤️
安装
composer require calebporzio/sushi
使用
使用此包分为两个步骤
- 将
Sushi
特性添加到模型中。 - 向模型添加一个
$rows
属性。
这就完了。
class State extends Model { use \Sushi\Sushi; protected $rows = [ [ 'abbr' => 'NY', 'name' => 'New York', ], [ 'abbr' => 'CA', 'name' => 'California', ], ]; }
现在,您可以在任何需要的地方使用此模型,它将表现得像您创建了一个具有您提供的行的表。
$stateName = State::whereAbbr('NY')->first()->name;
这对于“固定”数据非常有用,例如国家、地区、邮编、用户角色、站点设置等...
关系
假设您创建了一个 Role
模型,使用 Sushi 通过数组创建,如下所示
class Role extends Model { use \Sushi\Sushi; protected $rows = [ ['id' => 1, 'label' => 'admin'], ['id' => 2, 'label' => 'manager'], ['id' => 3, 'label' => 'user'], ]; }
您可以为另一个标准模型添加关系,就像通常那样
class User extends Model { ... public function role() { return $this->belongsTo(Role::class); } }
假设 users
表有一个 role_id
列,您可以这样做
// Grab a User. $user = User::first(); // Grab a Role. $role = Role::whereLabel('admin')->first(); // Associate them. $user->role()->associate($role); // Access like normal. $user->role; // Eager load. $user->load('role'); User::with('role')->first();
注意:处理 Sushi 模型关系时有一个注意事项。使用
whereHas
方法将不起作用。这是因为两个模型分布在两个不同的数据库中。
工作原理
在内部,这个包仅为这个模型创建和缓存了一个 SQLite 数据库。它会创建一个表并填充行。如果由于任何原因无法缓存 .sqlite 文件,它将默认使用内存中的 SQLite 数据库。
使用 ->getRows()
您可以选择不使用 protected $rows
属性,并直接实现自己的 getRows()
方法。
这将允许您在运行时确定模型的行。您甚至可以从第三方 API 等外部源生成模型行。
注意:如果您选择使用自己的 ->getRows() 方法,行将在请求之间不会进行缓存。
class Role extends Model { use \Sushi\Sushi; public function getRows() { return [ ['id' => 1, 'label' => 'admin'], ['id' => 2, 'label' => 'manager'], ['id' => 3, 'label' => 'user'], ]; } }