出于某种原因,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还没有意识到它可以使用表内外键并且正在寻找一个连接表。任何人都可以建议为什么会这样吗?我正在试着弄清楚我的设置有什么问题
答案 0 :(得分:0)
尝试以下方法:
对于第1步,您可以在模型中添加
var $has_one = array(
'CLASS' => array(
'join_other_as' => 'RELATIONSHIP_TABLE_NAME',
'join_self_as' => 'SELF_TABLE_NAME'
)
);