ArtiOnMoon
Проверенные
- Сообщения
- 64
- Реакции
- 36
- Баллы
- 715
Здравствуйте. Недавно спрашивал про валидатор и все же пришел к тому, что написал расширение для дополнительного поля типа Url. Однако, захотелось вынести эту штуку в отдельный тип поля. Полез в БД и нашёл столбец "match_type" - то что надо! Решил расширить допустимые значения точно так же как сделал с display_group, то есть так.
Попытка изменения столбца.
Однако при установке получил ошибку.
Как это исправить? И почему так получилось? ?
Попытка изменения столбца.
PHP:
public function installStep2()
{
$this->schemaManager()->alterTable('xf_user_field', function(Alter $table)
{
$table->changeColumn('match_type')->addValues('mylink');
});
}
PHP:
<?php
namespace ArtiOnMoon\Charlist;
use XF\AddOn\AbstractSetup;
use XF\AddOn\StepRunnerInstallTrait;
use XF\AddOn\StepRunnerUninstallTrait;
use XF\AddOn\StepRunnerUpgradeTrait;
use XF\Db\Schema\Alter;
use XF\Db\Schema\Create;
class Setup extends AbstractSetup
{
use StepRunnerInstallTrait;
use StepRunnerUpgradeTrait;
use StepRunnerUninstallTrait;
public function installStep1()
{
$this->schemaManager()->alterTable('xf_user_field', function(Alter $table)
{
$table->changeColumn('display_group')->addValues('my_new_display_group');
});
}
public function installStep2()
{
$this->schemaManager()->alterTable('xf_user_field', function(Alter $table)
{
$table->changeColumn('match_type')->addValues('mylink');
});
}
public function uninstallStep1()
{
$db = \XF::db();
$db->query("UPDATE `xf_user_field` SET `display_group` = 'personal' WHERE `display_group` = 'my_new_display_group'");
$this->schemaManager()->alterTable('xf_user_field', function(Alter $table)
{
$table->changeColumn('display_group')->removeValues('my_new_display_group');
});
}
public function uninstallStep2()
{
$db = \XF::db();
$db->query("UPDATE `xf_user_field` SET `match_type` = 'url' WHERE `match_type` = 'mylink'");
$this->schemaManager()->alterTable('xf_user_field', function(Alter $table)
{
$table->changeColumn('match_type')->removeValues('mylink');
});
}
}
Однако при установке получил ошибку.
In Column.php line 202:
xf_user_field: Cannot add values to a column when existing values are not loaded/do not apply
PHP:
'match_type' => ['type' => self::STR, 'default' => 'none',
'allowedValues' => ['none', 'number', 'alphanumeric', 'email', 'url', 'color', 'date', 'regex', 'callback', 'validator'],
'api' => true
],
Как это исправить? И почему так получилось? ?
Последнее редактирование: