[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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3
Summer

早就该有的 Eloquent 驱动

5年前 评论
游离不2

有意思。

4年前 评论

场景有限。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!