[Laravel 扩展推荐] sushi —— Eloquent 的数组驱动

Laravel

Sushi#

Eloquent 缺少 "array" 驱动。

有时您想使用 Eloquent,但不处理数据库。

项目主页:https:///github.com/calebporzio/sushi

安装#

composer require calebporzio/sushi

使用#

使用此软件包包括两个步骤:

1. 将 Sushi 特征添加到模型中。
2. 向模型添加 $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;

这对于 "固定" 数据非常有用,例如州,国家 / 地区,邮政编码,user_roles,sites_settings 等。

关系#

假设您基于使用 Sushi 的数组创建了一个 Role 模型,如下所示:

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 列,您可以执行以下操作:

// 获取一个用户.
$user = User::first();
// 获取一个角色.
$role = Role::whereLabel('admin')->first();

// 关联它们.
$user->role()->associate($role);

// 像往常一样访问.
$user->role;

// 饥饿加载.
$user->load('role');
User::with('role')->first();

注意:处理 Sushi 模型关系时有一个警告。具有 whereHas 将不起作用。这是因为两个模型分布在两个单独的数据库中。

怎么运行的#

在后台,此程序包为此模型创建并缓存一个 SQLite 数据库。它创建一个表并填充行。如果由于某种原因它无法缓存.sqlite 文件,则默认使用内存中的 sqlite 数据库。

Using->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'],
        ];
    }
}
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://github.com/calebporzio/sushi

译文地址:https://learnku.com/laravel/t/40824

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。