【发布时间】:2020-02-03 21:25:37
【问题描述】:
我正在尝试创建一个新插件,通过添加一个新的 order 列来更新现有表 rainlab_blog_categories。
我设法用一个新字段更新了视图,但是我无法成功更新数据库。
我使用 CLI php artisan create:plugin ZiedHf.BlogSorting 搭建了插件骨架。
下面的文件是:Plugin.php 和更新目录下的文件。
看起来第二个没有运行up 方法来更新数据库。
插件.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);
});
}
}
}
这样做的适当方法是什么?
正确执行迁移缺少什么? updates/ 下的文件在我每次运行 php artisan plugin:refresh ZiedHf.Blogsorting 或 php artisan october:up
[已解决] 更新: 问题出在 version.yaml 文件中。 它应该包含 update 文件名:
1.0.1:
- First version of BlogSorting
- create_blog_sorting.php
谢谢!
【问题讨论】:
-
观看此视频,了解有人如何扩展 user plugin here。
-
能否分享您的
updates\version.yaml文件内容。 -
@HardikSatasiya 您的评论帮助我解决了问题,我不知道 version.yaml 应该包含更新文件名。如果您想在下面添加回复,我会将其标记为正确的。
-
是的,谢谢,它可以帮助别人:)
标签: laravel octobercms octobercms-plugins