我正在使用Codeigniter 3.1.8和Bootstrap 4开发一个基本的博客应用程序。
我使用迁移文件(001_create_authors.php
最多005_create_comments.php
个(来自动创建必要的数据库表。
运行迁移的控制器位于
应用程序/控制器/迁移.php
它有流动的代码:
class Migrate extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->library('migration');
if($this->migration->current() === FALSE)
{
show_error($this->migration->error_string());
}
else {
echo 'Migration executed';
}
}
}
默认控制器是Posts
控制器,如routes.php
文件所示:$route['default_controller'] = 'posts';
如果数据库中没有表,我希望Posts
控制器重定向到Migrate
控制器。Codeigniter 是否有确定是否没有表的方法?我该如何使用它?
https://www.codeigniter.com/user_guide/database/metadata.html
if (count($this->db->list_tables()) == 0) {
redirect(...);
}
我以这种方式得到了想要的结果:
在帖子控制器(默认(中:
public function index() {
// Create all the database tables if there are none
// by redirecting to the Migrations controller
if (count($this->db->list_tables()) == 0) {
redirect('migrate');
}
// More code
}
在迁移控制器中:
class Migrate extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
$this->load->library('migration');
if($this->migration->current() === FALSE)
{
show_error($this->migration->error_string());
}
else {
$this->session->set_flashdata('tables_created', "All the required database tables have been created. You can now register.");
redirect('/');
}
}
}