我是一个推动新手,并且遇到了与促进多对多关系相关的问题。 我有两个表格。 用户:
<table name="users" phpName="User">
<!-- column and foreign key definitions go here -->
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="username" type="varchar" size="50" required="true" />
<column name="password" type="varchar" size="256" required="true" />
<unique>
<unique-column name="username"/>
</unique>
<index>
<index-column name="username"/>
</index>
<behavior name="timestampable"/></table>
公司:
<table name="companies" phpName="Company">
<!-- column and foreign key definitions go here -->
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
<column name="name" type="varchar" size="256" required="true" />
<behavior name="timestampable"/></table>
这是桥牌表
<table name="users_companies" isCrossRef="true">
<!-- column and foreign key definitions go here -->
<column name="user_id" type="integer" primaryKey="true" />
<column name="company_id" type="integer" primaryKey="true" />
<foreign-key foreignTable = "companies" phpName="Company">
<reference local="company_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable = "users" phpName="User">
<reference local="user_id" foreign="id"/>
</foreign-key>
<behavior name="timestampable"/>
</table>
当我试图让公司与用户相关时,
CompanyQuery::create() ->filterByUser($user)->find();
我可以成功获得所有用户。但是,当我尝试让所有用户与公司相关时
$user = UserQuery::create()->filterByCompany($company)->find();
我没有得到任何用户。我还检查了生成的sql,它只有一种方式关系
CREATE TABLE `users_companies`(
`user_id` INTEGER NOT NULL,
`company_id` INTEGER NOT NULL,
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`user_id`,`company_id`),
INDEX `users_companies_FI_1` (`company_id`)) ENGINE=MyISAM;
任何人都可以指出我做错了什么吗?
答案 0 :(得分:0)
您正在使用不支持外键的ENGINE = MyISAM。也许这与它有关。
确保您的build.properties
包含以下内容。
; mysql options
propel.mysql.tableType = InnoDB
我生成的'bridge'表sql如下所示。
CREATE TABLE `users_companies`
(
`user_id` INTEGER NOT NULL,
`company_id` INTEGER NOT NULL,
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`user_id`,`company_id`),
INDEX `users_companies_FI_1` (`company_id`),
CONSTRAINT `users_companies_FK_1`
FOREIGN KEY (`company_id`)
REFERENCES `companies` (`id`),
CONSTRAINT `users_companies_FK_2`
FOREIGN KEY (`user_id`)
REFERENCES `users` (`id`)
) ENGINE=InnoDB;
如果这一切都无法确保您使用最新的Propel(1.6.8)。
我还有一个生成的BaseUser :: getCompanys()和BaseCompany :: getUsers()。