我尝试使用codeigniter 4连接两个具有不同数据库的表。我已经使用$db1和$db2声明了不同的数据库。我的问题是当我尝试连接时,它显示错误“Table 'db2.student' doesn't exist”。但我尝试通过在'db2'上运行一个简单的查询来测试这一点,而没有连接,结果是确定的。
我的第一个项目,表'attendance'和'student'在同一个数据库'$db1'中,数据显示正确连接。
在第二个项目中,我尝试将表'student'移动到db2($db2)并尝试进行连接,但错误显示“Table 'db2.student' doesn't exist”。
数据库$db1和$db2在同一台服务器上(我的本地主机)。
我的控制器(JoinController.php)
<?php
namespace App\Controllers;
use CodeIgniter\Controller;
class JoinController extends Controller
{
public function index()
{
// Load the databases
$db1 = \Config\Database::connect('db1');
$db2 = \Config\Database::connect('db2');
// Load the model
$model = new \App\Models\JoinModel($db1, $db2);
// Get the joined result from the model
$data['result'] = $model->getJoinedData();
// Load the view with the data
return view('join_view', $data);
}
}
字符串
我的模型(JoinModel.php)
<?php
namespace App\Models;
use CodeIgniter\Model;
class JoinModel extends Model
{
protected $db1;
protected $db2;
public function __construct($db1, $db2)
{
// Set the databases
$this->db1 = $db1;
$this->db2 = $db2;
}
public function getJoinedData()
{
// Perform the join
$query = $this->db1->table('attendance as k')
->select('k.id, k.time_in, k.time_out, s.student_name, s.programme')
->join('db2.student as s', 'k.id= s.id')
->get();
// Get the result
return $query->getResult();
// Example query to test the connection to db2
// $query = $this->db2->table('student')->get();
// return $query->getResult();
// var_dump($query);
}
}
型
我的视图(join_view.php)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Joined Data</title>
</head>
<body>
<h1>Joined Data</h1>
<table border="1">
<tr>
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<!-- Add more table headers as needed -->
</tr>
<?php foreach ($result as $row): ?>
<tr>
<td><?= $row->id ?></td>
<td><?= $row->student_name ?></td>
<td><?= $row->programme ?></td>
<!-- Add more table cells as needed -->
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
型
我很感激任何帮助。谢谢
1条答案
按热度按时间9bfwbjaz1#
如果存在db 1和db2database schemas,并且存在db1.attendance和db2.student,则您提供的查询应该可以工作。如果数据库架构位于不同的服务器上,则查询将无法工作。
确保 * db 1 * 和 db2 连接到同一台服务器,或者您可以使用以下替代解决方案。
一个连接可以连接到多个数据库模式,所以你可以连接表。你不必为此目的有两个不同的连接。下面应该工作。
控制器:
字符串
型号:
型
如果数据库模式在不同的服务器上,您可以单独查询数据,然后在PHP中连接它们。根据SQL类型,有 * 替代方案 *。例如MySQL,有MySQL联合存储引擎或Oracle数据库链接。或者您可以简单地从一台服务器迁移到另一台服务器。