Codeigniter Datamapper ORM - 表内外键不起作用

时间:2014-06-29 20:49:57

标签: php codeigniter codeigniter-datamapper

出于某种原因,Datamapper无法识别我的表内外键关系,并且在尝试访问我的相关对象时尝试使用连接表。

这可能是你能得到这种关系的最简单的例子。这是我的代码的样子:

class Venue extends DataMapper
{
    public $has_one = ['town'];
} 

class Town extends DataMapper
{
    public $has_many =['venue'];
} 

// Controller
class Pubs extends CI_Controller
{
    public function single($id) {
        $v = new Venue($id);
        $v->town->get();
        echo $v->town->name;
    }
} 

这是我的场地表的mysql CREATE代码:

CREATE TABLE `venues` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(45) NULL DEFAULT NULL,
    `town_id` INT(10) UNSIGNED NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
    INDEX `town_venue` (`town_id`),
    CONSTRAINT `FK1_towns` FOREIGN KEY (`town_id`) REFERENCES `towns` (`id`)
) 

这里是城镇表:

CREATE TABLE `towns` (
    `id` INT(10) UNSIGNED NOT NULL,
    `name` VARCHAR(45) NULL DEFAULT NULL,
    `country` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
) 

当我在控制器中运行该方法时,我收到一个codeigniter DB错误,指出“表'mydatabase.towns_venues'不存在”。

显然,datamapper还没有意识到它可以使用表内外键并且正在寻找一个连接表。任何人都可以建议为什么会这样吗?我正在试着弄清楚我的设置有什么问题

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

  1. 在模型中明确添加外键
  2. 尝试从表中删除外键,看看它是否有效。
  3. 对于第1步,您可以在模型中添加

    var $has_one = array(
        'CLASS' => array(
            'join_other_as' => 'RELATIONSHIP_TABLE_NAME',
            'join_self_as' => 'SELF_TABLE_NAME'
        )
    );
    

    Reference