ervinne / nw-cms-version
启用Laravel模型版本控制字段。
Requires
- php: >=5.6
- laravel/framework: >=5.4
Requires (Dev)
- phpunit/phpunit: 5.2.*
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, ], ],
其中table、primary_key、classpath是要进行版本控制的模型的表、主键和类路径。is_published_field是要在模型内部进行版本控制的字段名称,例如:is_published、is_active等。is_published_value是需要设置为将字段视为“已发布”的值,is_unpublished_value则相反。
如果您想在1个模型中版本控制多个字段,只需在models数组中重复具有相同table、primary_key和classpath的模型条目。
迁移模型
要启用模型的版本控制,用户必须在配置后使用以下命令进行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,则其数据将更新到相应的模型中。