ervinne/nw-cms-version

启用Laravel模型版本控制字段。

v1.0.2 2018-06-06 03:29 UTC

This package is not auto-updated.

Last update: 2024-09-21 05:00:43 UTC


README

此包允许对Laravel模型中名为versions的标签进行标记。版本允许在模型中指定字段的不同值。

安装

在您的composer.json中要求该包,并更新您的依赖项

    $ composer require "ervinne/nw-cms-version:v1.0.0"

然后在您的config/app.php提供者数组中添加服务提供者

    Ervinne\CMSVersion\Providers\CMSVersionServiceProvider::class,

注册命令

为了允许从模型生成可版本控制的迁移命令,请将GenerateCMSVersionMigrations类添加到App\Console\Kernel$commands属性

    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        Ervinne\CMSVersion\Commands\GenerateCMSVersionMigrations::class
    ];

配置

您可以在config/cms-versions.php配置文件中设置要"版本控制"的模型。发布配置以创建此配置文件。请注意,您还需要发布以生成在已显示的表上反映版本数据所需的所有javascript文件(稍后详述)

    $ php artisan vendor:publish --provider="Ervinne\CMSVersion\Providers\CMSVersionServiceProvider"

config/cms-versions.php中设置您想要版本控制的模型

    'models' => [
        [
            'table'                => 'my_table',
            'primary_key'          => 'id',
            'classpath'            => \App\User::class,
            'is_published_field'   => 'my_is_published_field',
            'is_published_value'   => true,
            'is_unpublished_value' => false,
        ],
    ],

其中tableprimary_keyclasspath是要进行版本控制的模型的表、主键和类路径。is_published_field是要在模型内部进行版本控制的字段名称,例如:is_publishedis_active等。is_published_value是需要设置为将字段视为“已发布”的值,is_unpublished_value则相反。

如果您想在1个模型中版本控制多个字段,只需在models数组中重复具有相同tableprimary_keyclasspath的模型条目。

迁移模型

要启用模型的版本控制,用户必须在配置后使用以下命令进行migrate

    $ php artisan make:cmsvmigration

这将创建一个名为create_cms_version_pivot_tables的迁移,其中包含基于config/cms-versions.php中配置的数据库更改。之后使用以下命令进行迁移

    $ php artisan migrate

模型设置

使用模型中的VersionControlled特质以启用版本控制功能

    ...
    use Ervinne\CMSVersion\VersionControlled;

    class BannerSet extends Model
    {
        use VersionControlled;
    ...

将模型保存到版本中

在保存模型之前,您需要先保存一个版本

    CMSVersion::insert([
        'display_name' => 'Default',
        'description' => 'Default Version',
        'status' => 'Published'
    ]);

通过在模型的version_id字段中指定已保存的CMSVersion对象的id来保存模型,然后使用saveWithVersion()方法保存。

    $bannerSet               = new BannerSet();
    $bannerSet->version_id   = $request->version_id; // assumes the version comes from the request
    $bannerSet->label        = $request->label;
    $bannerSet->images_json  = $request->banners;
    $bannerSet->is_published = $request->is_published;
    $bannerSet->saveWithVersion();

版本状态

版本status可以是任何字符串,但"Published"是保留的,表示版本是当前使用的版本。如果您尝试将版本控制字段保存到设置为非published版本的模型中,则这些更改不会保存到模型本身,而只会保存在版本记录中。如果将包含模型数据的版本设置为published,则其数据将更新到相应的模型中。