Testing cakephp测试套件:为HABTM导入fixtures表

Testing cakephp测试套件:为HABTM导入fixtures表,testing,cakephp,has-and-belongs-to-many,fixtures,Testing,Cakephp,Has And Belongs To Many,Fixtures,我有一个模型Post->hasandbelongtomany->Tag 为了进行测试,我为每个模型创建了固定装置,例如,模型柱的固定装置如下所示 class PostFixture extends CakeTestFixture { var $import = array('model' => 'Post', 'records' => true, 'connection' => 'fixtures'); } 对于该模型,一切都很好,但当我尝试为HABTM关系创建夹具时

我有一个模型
Post->hasandbelongtomany->Tag

为了进行测试,我为每个模型创建了固定装置,例如,模型柱的固定装置如下所示

class PostFixture extends CakeTestFixture {
    var $import = array('model' => 'Post', 'records' => true, 'connection' => 'fixtures');
}
对于该模型,一切都很好,但当我尝试为HABTM关系创建夹具时,使用相同的方法不起作用:

class PostsTagFixture extends CakeTestFixture {
    var $import = array('model' => 'PostTag', 'records' => true, 'connection' => 'fixtures');
}
CakePHP生成的SQL如下

CREATE TABLE `service_types_technicals` (
    `technical_id` int(20) NOT NULL AUTO_INCREMENT,
    `service_type_id` int(20) NOT NULL AUTO_INCREMENT,
    `id` varchar(255) NOT NULL, PRIMARY KEY  (`id`))    ;
Wich不正确,因为该表没有名为id的字段

然后,我试了一下:

class PostsTagFixture extends CakeTestFixture {
    var $name = 'PostsTag';
    var $import = array('table' => 'posts_tags', 'records' => true, 'connection' => 'fixtures');
}
还有一个错误,但这次SQL是:

CREATE TABLE `service_types_technicals` (
    `technical_id` int(20) NOT NULL AUTO_INCREMENT,
    `service_type_id` int(20) NOT NULL AUTO_INCREMENT,  PRIMARY KEY  (`service_type_id`))   ;
我做错了什么?从另一个数据库导入装置的正确方法是什么,以便
拥有并属于许多关系

谢谢大家!

毛罗·扎杜内斯基


当您声明
service\u types\u technicals
没有id字段时,我猜CakePHP会自动将HABTM从service\u类型推断为technicals,因为两者都是复数形式的名词(CakePHP约定)。如果您没有想到这一点,那么您将被迫更改表的名称以保持在约定范围内。

问题是habtm关系表中缺少字段id,它现在已修复。

我对此不太了解,但据我所知,habtm关系需要一个id字段。这可能就是Cake试图创建一秒钟的原因,即每个表都有一个id列afaik。@JonhP没错,放置一个id字段解决了这个问题。你能把它作为答案贴出来吗?这样我就可以把它标记为已回复,你就可以获得分数了?非常感谢。