Я только начал работать с CodeIgniter 3, понимаю, что он уже устарел, но поставлена задача работать с ним. А у меня сразу возникла проблема, перерыл интернет так и не нашел ответа.
Мне кажется, что я просто упускаю небольшую деталь. Помогите, пожалуйста, направить меня на истинный путь.
Миграция:
class Migration_Add_blog extends CI_Migration {
public function up()
{
$this->dbforge->add_field(array(
'id' => array(
'type' => 'INT',
'unsigned' => TRUE,
'auto_increment' => TRUE
),
'title' => array(
'type' => 'TEXT',
'null' => TRUE,
),
));
$this->dbforge->add_key('id', TRUE);
$this->dbforge->create_table('blog');
}
Миграция.php
public function index()
{
$this->load->library('migration');
if (!$this->migration->version(1))
{
show_error($this->migration->error_string());
}
}
миграция.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$config['migration_enabled'] = TRUE;
$config['migration_type'] = 'sequential';
$config['migration_table'] = 'migrations';
$config['migration_auto_latest'] = FALSE;
$config['migration_version'] = 1;
$config['migration_path'] = APPPATH.'migrations/';
Моя ошибка:
В классе миграции «Migration_Add_blog» отсутствует метод «вверх».
Чтобы решить эту проблему, нам пришлось немного углубиться в родительский класс под названием «CI_Migration». У меня php8.0, он некорректно работал с установленным по умолчанию Codeigniter 3.2.0-dev именно строчкой:
elseif ( ! is_callable(array($class, $method)))
в файловой системе/библиотеки/Migration.php
Но в версии 3.1.0 эта строка выглядит так.
elseif ( ! in_array($method, array_map('strtolower', get_class_methods($class))))
И именно этот вариант сработал.
поэтому php 8 был условием :)
Такая же ошибка возникает и для PHP 7?
Ваш код кажется правильным. Я бы посмотрел текущий номер миграции и поменял
if ($this->migration->current() === FALSE){ show_error($this->migration->error_string()); }
не версию, может миграция прошла 1