编码器数据表ORM表内外键不工作


Codeigniter Datamapper ORM - in-table foreign key not working

由于某些原因,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`)
) 

当我在控制器中运行该方法时,我得到一个编码器DB错误,说明"表"mydatabase。towns_场馆'不存在' .

显然datamapper没有意识到它可以使用表内外键,并且正在寻找连接表。有人能告诉我为什么会这样吗?

尝试如下:

  1. 显式地在模型中添加外键
  2. 试着从你的表中删除外键,看看是否有效。

对于第一步,这里是你可以在模型中添加的内容

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