JOIN を含むクエリを作成しています。Active Record で db を扱うのはこれが初めてで、ちょっとした障害にぶつかりました。
companies
ユーザーがいる会社の名前などを取得できるように、テーブルに呼び出されたテーブルに参加したいのですが、users
次のように成功しました。
function get_profile_by_username($username)
{
$this->db->join('companies', $this->table_name.'.company_id = companies.id');
$this->db->where('LOWER(username)=', strtolower($username));
$query = $this->db->get($this->table_name);
if ($query->num_rows() == 1) return $query->row();
return NULL;
}
ただし、問題は、 のフィールドが でcompanies
あり、id
単にname
と呼ばれるオブジェクトに返されることname
です。
通常、生のクエリを作成する場合、テーブルにエイリアスを指定すると、結果は , のようu.company_id
になりc.name
ます。したがってname
、ユーザーとは何の関係もないことはわかっていますが、もちろん会社の名前です。現在は問題ではありませんが、将来的には問題になる可能性がありますが、id
列は明らかに結果セットに共存できないため、上書きされます。
特定のテーブルに由来するフィールドをこのように区別するにはどうすればよいでしょうか? または、テーブルの結合と、結合されたクエリ データ セット/オブジェクトを操作するためのより良い方法はありますか?
編集:
生のクエリとして実行していた場合は、次のようにします。
SELECT u.id, u.username, c.name
FROM users AS u
JOIN companies AS c
ON c.id = u.company_id
WHERE u.username = 'foobar';
これは素晴らしいことですが、アクティブなレコードでそれをやろうとした場合、それがうまくいくとしても、それはかなり貧弱な方法だと思います。