在codeigniter中有多对多的数据库关联

时间:2014-03-12 01:01:23

标签: php codeigniter activerecord associations

我正在使用codeigniter和ion_auth创建一种卡片收集程序进行身份验证。用户应该能够将卡片添加到他的收藏中。 所以我有一个用户表和一张牌桌以及一个交叉/桥牌表。

    users
    ID
    NAME

    cards
    ID
    NAME

    users_cards
    ID
    USER_ID
    CARD_ID

我想完成一个SELECT语句,通过user_cards从用户检索卡片。

$this->db->select('*');
$this->db->from('cards');
$this->db->join('users_cards', 'users.id = users_cards.user_id', 'inner');
$this->db->join('users', 'users_cards.user_id = users.id', 'inner');
$query = $this->db->get();
return $query->result_array();

我似乎无法掌握这些联接的概念。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

看起来连接语句缺少对“卡片”表的引用。

$this->db->select('*');
$this->db->from('users_cards');
$this->db->join('users', 'users.id = users_cards.user_id', 'inner');
$this->db->join('cards', 'cards.id = users_cards.card_id', 'inner');
$query = $this->db->get();
return $query->result_array();

这个想法是你试图通过引用他们的相关ID来获得users_cards和其他两个表之间的关系

答案 1 :(得分:0)

由于您没有加入用户表,因此无法基于users.id引用加入。所以你需要改变

$this->db->join('users_cards', 'users.id = users_cards.user_id', 'inner');

$this->db->join('users_cards', 'cards.id = users_cards.card_id', 'inner');