我正在尝试创建新的插件,以通过添加新的rainlab_blog_categories
列来更新现有表order
。
我设法用一个新字段更新了视图,但是我无法成功更新数据库。
我使用CLI php artisan create:plugin ZiedHf.BlogSorting
来搭建插件框架。
下面的文件是:Plugin.php,文件位于更新目录中。
第二个数据库似乎没有运行up
方法来更新数据库。
Plugin.php:
<?php namespace ZiedHf\BlogSorting;
use Backend;
use System\Classes\PluginBase;
use RainLab\Blog\Models\Category as CategoryModel;
use RainLab\Blog\Controllers\Categories as CategoriesController;
/**
* BlogSorting Plugin Information File
*/
class Plugin extends PluginBase
{
const DEFAULT_ICON = 'icon-magic';
// const LOCALIZATION_KEY = 'ziedhf.blogsorting::lang.';
const DB_PREFIX = 'ziedhf_blogsorting_';
public $require = [
'RainLab.Blog'
];
/**
* Returns information about this plugin.
*
* @return array
*/
public function pluginDetails()
{
return [
'name' => 'Blog Sorting',
'description' => 'Enhance sorting for Blog',
'author' => 'Zied Hf',
'icon' => 'icon-leaf',
'homepage' => 'https://github.com/ziedhf/helloTunisia'
];
}
/**
* Boot method, called right before the request route.
*
* @return array
*/
public function boot()
{
$this->extendController();
$this->extendModel();
}
/**
* Extend Categories controller
*/
private function extendController()
{
CategoriesController::extendFormFields(function ($form, $model) {
if (!$model instanceof CategoryModel) {
return;
}
$form->addFields([
self::DB_PREFIX . 'order' => [
'label' => 'Order',
'type' => 'number',
'comment' => 'Set the order here',
'allowEmpty' => true,
'span' => 'left'
]
]);
});
}
/**
* Extend Category model
*/
private function extendModel()
{
CategoryModel::extend(function ($model) {
$model->addDynamicMethod('getBlogSortingOrderAttribute', function() use ($model) {
return $model->{self::DB_PREFIX . 'order'};
});
});
}
}
create_blog_sorting.php文件:
<?php
namespace ZiedHf\BlogSorting\Updates;
use Schema;
use System\Classes\PluginManager;
use ZiedHf\BlogSorting\Plugin;
use October\Rain\Database\Updates\Migration;
/**
* Class CreateBlogSorting
*
* @package ZiedHf\BlogSorting\Updates
*/
class CreateBlogSorting extends Migration
{
const TABLE = 'rainlab_blog_categories';
/**
* Execute migrations
*/
public function up()
{
if (PluginManager::instance()->hasPlugin('RainLab.Blog')) {
$this->createFields();
}
}
/**
* Rollback migrations
*/
public function down()
{
if (PluginManager::instance()->hasPlugin('RainLab.Blog')) {
$this->dropFields();
}
}
/**
* Remove new fields
*/
private function dropFields()
{
$this->dropColumn(Plugin::DB_PREFIX . 'order');
}
/**
* Create new fields
*/
private function createFields()
{
if (!Schema::hasColumn(self::TABLE, Plugin::DB_PREFIX . 'order')) {
Schema::table(self::TABLE, function ($table) {
$table->integer(Plugin::DB_PREFIX . 'order')->nullable();
});
}
}
/**
* @param string $column
*/
private function dropColumn(string $column)
{
if (Schema::hasColumn(self::TABLE, $column)) {
Schema::table(self::TABLE, function ($table) use ($column) {
$table->dropColumn($column);
});
}
}
}
执行此操作的适当方法是什么?
正确执行迁移缺少什么?每次我运行php artisan plugin:refresh ZiedHf.Blogsorting
或php artisan october:up
[已解决]更新: 问题出在version.yaml文件中。 它应包含 update 文件名:
1.0.1:
- First version of BlogSorting
- create_blog_sorting.php
谢谢!
答案 0 :(得分:2)
插件具有updates\version.yaml
文件,该文件将跟踪插件的所有数据库更新。
因此请确保
your file name [create_blog_sorting.php]
位于updates\version.yaml
内,然后refresh plugin
应在您的情况下向数据库添加迁移文件的更改,这将添加列:)
1.0.1:
- First version of BlogSorting
- create_blog_sorting.php <- this one :)
它应该可以工作:),确保
class name
位于CamelCase [ CreateBlogSorting ]
中。File name and entry
中的updates\version.yaml
位于snake_case [create_blog_sorting.php]
中