由于某些原因,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没有意识到它可以使用表内外键,并且正在寻找连接表。有人能告诉我为什么会这样吗?
尝试如下:
- 显式地在模型中添加外键
- 试着从你的表中删除外键,看看是否有效。
对于第一步,这里是你可以在模型中添加的内容
var $has_one = array(
'CLASS' => array(
'join_other_as' => 'RELATIONSHIP_TABLE_NAME',
'join_self_as' => 'SELF_TABLE_NAME'
)
);
参考