CodeIginter(3.0.3)のjoin()で遭遇したこと

今後のために勉強していたCodeIgniterで、バグなのか自分の理解が足らずにおかしな挙動になったのかはわからないけど、変な現象に行き当たったので、忘れた時のためにメモ。

■内容
joinしてselectした結果の、ユニーク列の値が全て同じ値(全部1)になった。

■例
前提として、一対一の関係になっている以下の様なテーブルがあるとします。

・テーブルA
id,col1,テーブルB_id
1,test1,1
2,test2,2

・テーブルB
id,col2,col3
1,test1_title,test1_text
2,test2_title,test2_text

これを、joinで繋げて変数に格納しようとした時に、以下のようにすると、『内容』に書いてあるような事例に遭遇しました。

$this->db->select('*');
$this->db->from('テーブルA');
$this->db->join('テーブルB', 'テーブルB.id = テーブルA.テーブルB_id
$query = $this->db->get()->result_array();

$queryの中身(実際は配列)

id,col1,テーブルB_id,テーブルB.id,col2,col3
1,test1,1,test1_title,test1_text
1,test2,2,test2_title,test2_text

↑『id』カラムの値が全て同じ値になってしまう。
 
 
これを回避するには、以下のようにします。

$this->db->select('*');
$this->db->select('テーブルA.id'); // ←追加
$this->db->from('テーブルA');
$this->db->join('テーブルB', 'テーブルB.id = テーブルA.テーブルB_id
$query = $this->db->get()->result_array();

$queryの中身(実際は配列)

id,col1,テーブルB_id,テーブルB.id,col2,col3
1,test1,1,test1_title,test1_text
2,test2,2,test2_title,test2_text

↑正しいデータになる。
 
 
末尾にテーブルAのidを追加して、それを参照すれば良いかと思って記述を追加したら、何故か出力結果のカラムは同じままデータだけが正しい状態になりました。
おそらく、joinしたテーブル同士のユニーク列の名前被りが原因で起こるバグなのではないかと思いますが、詳しいところはわかっていません。

CodeIginter(3.0.3)のjoin()で遭遇したこと” への1件のコメント

  1. ピンバック: CodeIginter(3.0.3)のjoin()の仕様 | WILD AT HONEY

コメントを残す

メールアドレスが公開されることはありません。