当我使用 CI 的 Active Record 执行联接时,有时结果不会显示所有字段。例如,当对具有相同字段名称的表执行连接时,该表的字段之一将不会显示在结果中。
例子 :
=== TABLE users ===
id INT(10)
first_name VARCHAR(255)
last_name VARCHAR(255)
=== TABLE messages ===
id INT(10)
exp_id INT(10)
dest_id INT(10)
content TEXT
=== CONTENT OF THE DATABASE ===
INSERT INTO users VALUES (1, "Bob", "Smith");
INSERT INTO users VALUES (2, "Graig", "Anderson");
INSERT INTO messages VALUES (999, 1, 2, "Hello Graig!");
=== the query ===
$this->db->where('messages.id', 999);
$this->db->join('users exp', 'users.id=messages.exp_id', 'INNER');
$this->db->join('users dest', 'users.id=messages.dest_id', 'INNER');
$res = $this->db->get('messages');
== the result ===
id exp_id dest_id content first_name last_name
999 1 2 Hello Graig! Bob Smith
我无法同时检索“dest.first_name”和“dest.first_name”。表“dest”在 join() 中,但与表“exp”有冲突,表“exp”也有字段“first_name”和“last_name”。实际上这不是 CI 问题,这就是 MySQL 的行为方式。
可以使用 select / aliases 修复它,但是有没有办法让 CI 将连接表的别名附加(或预先附加)到其字段?所以结果可能如下所示:
id exp_id dest_id content id_exp first_name_exp last_name_exp id_dest first_name_dest last_name_dest
999 1 2 Hello Graig! 1 Bob Smith 2 Graig Anderson