awssat/laravel-kabsa

Laravel 数组数据库

v1.5 2022-08-27 21:25 UTC

This package is auto-updated.

Last update: 2024-08-28 01:40:33 UTC


README

Latest Version on Packagist Software License Build Status Quality Score Total Downloads

Laravel Kabsa 是一个简单的数组特质,用于您的 Eloquent 模型,类似于 https://github.com/calebporzio/sushi,但不使用 SQLite

安装

要开始使用 Laravel Kabsa,请使用 Composer 将包添加到您项目的依赖项中

composer require awssat/laravel-kabsa

示例

代码示例请参考 示例:examples

使用

  1. Kabsa 特质添加到模型中。
  2. 在模型中添加 $rows 属性。
class State extends Model
{
    use \Awssat\Kabsa\Traits\Kabsa;

    protected $rows = [
        [
            'abbr' => 'NY',
            'name' => 'New York',
        ],
        [
            'abbr' => 'CA',
            'name' => 'California',
        ],
    ];
}

或者

class State extends Model
{
    use \Awssat\Kabsa\Traits\Kabsa;

    public function getRows() 
    {
        return [
            [
                'abbr' => 'NY',
                'name' => 'New York',
            ],
            [
                'abbr' => 'CA',
                'name' => 'California',
            ],
        ];
    }
}

现在,您可以在任何需要的地方使用这个模型,它将表现得好像您已创建了包含您提供的行的表。

$stateName = State::where('Abbr', 'NY')->first()->name;

// or
$stateName = State::firstWhere('Abbr', 'NY')->name;

关系

class Role extends Model
{
    use \Awssat\Kabsa\Traits\Kabsa;

    protected $rows = [
        ['label' => 'admin'],
        ['label' => 'manager'],
        ['label' => 'user'],
    ];
}

您可以通过名为 KabsaRelationships 的新特质向另一个标准模型添加关系,目前我仅添加了两个关系,希望我们能添加更多

class User extends Model
{
    use \Awssat\Kabsa\Traits\KabsaRelationships;

    public function role()
    {
        return $this->belongsToKabsaRow(Role::class, 'role_label', 'label');
    }
}

如果 users 表应该有一个 role_label 列,那么

// Grab a User.
$user = User::first();
// Grab a Role.
$role = Role::where('label', 'admin')->first();

// Associate them.
$user->role()->associate($role);

// Access like normal.
$user->role;

预加载不适用,因为它是一个集合,您不需要预加载,可以直接调用关系 ->relation。如果需要将其附加到集合数组中,可以创建一个属性并将其添加到 $appends 中。

许可证

MIT 许可证(MIT)。请参阅 许可证文件 以获取更多信息。