laravie / dhosa

Laravel Eloquent 的热插拔

v1.1.0 2020-08-31 12:26 UTC

This package is auto-updated.

Last update: 2024-08-24 12:09:37 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

Dhosa 允许开发者为 Eloquent 模型实现热插拔功能。这有助于包开发者创建基础模型,应用开发者可以在基础模型的基础上进行扩展,同时确保所有关系都使用正确的模型。

安装

通过 composer 安装,请在终端运行以下命令

composer require "laravie/dhosa"

用法

启用热插拔

要为任何 Eloquent 启用热插拔,您只需使用 Laravie\Dhosa\Concerns\Swappable 并实现该方法。

<?php

namespace App\Models;

// ...
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Dhosa\Concerns\Swappable;

class User extends Authenticatable
{
    use Swappable;
    
    /**
     * Get Hot-swappable alias name.
     *
     * @return string
     */
    public static function hsAliasName(): string
    {
        return 'User';
    }
}

注册热插拔

use Laravie\Dhosa\HotSwap;

HotSwap::register('Orchestra\Model\User');

覆盖热插拔

App\Providers\AppServiceProvider 中,我们现在可以通过添加以下内容来覆盖 UserApp\User 的解析

use Laravie\Dhosa\HotSwap;

HotSwap::override('User', 'App\User');

定义关系

您可以使用以下代码定义关系

use Orchestra\Model\User;

/* ... */

public function user() 
{
    return $this->belongsTo(User::hsFinder());
}

进行查询

use Orchestra\Model\User;

$user = User::hs(); // return instance of App\User

$user = User::hs()->query(); // return a query builder for App\User

$user = User::hsOn('api'); // return a query builder for App\User using `api` db connection.

$user = User::hsOnWriteConnection(); // return a query builder for App\User using write PDO connection.

辅助方法

use Orchestra\Model\Role;
use Orchestra\Model\User;

User::hsAliasName(); // return "User"

User::hsFinder(); // return "App\User"

Role::hsFinder(); // return "Orchestra\Model\Role"