我正在使用 Codeigniter 3.1.8 和 Bootstrap 4 开发一个基本的博客应用程序。
我使用迁移文件(从001_create_authors.php
到005_create_comments.php
)自动创建必要的数据库表。
运行迁移的控制器位于
application / controllers / Migrate.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是否具有确定是否没有表的方法?我该怎么用?
答案 0 :(得分:3)
https://www.codeigniter.com/user_guide/database/metadata.html
if (count($this->db->list_tables()) == 0) {
redirect(...);
}
答案 1 :(得分:0)
我以这种确切的方式得到了预期的结果:
在“帖子”控制器中(默认):
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('/');
}
}
}