【发布时间】:2011-04-28 11:06:04
【问题描述】:
(链接到上一个问题以防万一:Struggling with one-to-many relation in an admin form)
在我的 Symfony-1.3 / Propel-1.4 项目中,用户和合作伙伴之间存在这种多对多关系。保存用户时,如果某个布尔标志为真,我想清除所有与合作伙伴的链接。这是我目前所做的,但它不起作用:
// inside the User model class
public function save(PropelPDO $con = null) {
if ($this->getIsBlaBla()) {
$this->setStringProperty(NULL);
$this->clearUserPartners();
}
parent::save($con);
}
将字符串属性设置为 NULL 有效;查看数据库清楚地表明了这一点。然而,USER_PARTNER 表仍然保存着用户和合作伙伴之间的关系。所以我想我必须一个一个地清除链接,像这样:
foreach($this->getUserPartners() as $user_partner) {
$user_partner->delete();
//UserPartnerPeer::doDelete($user_partner); // tried that too
}
两者都不行。
正如我在上一个问题中提到的,我只是通过反复试验来学习 Symfony,所以我显然错过了一些非常明显的东西。请指出正确的方向!
编辑:这是我的工作方式:
将代码移至 Form 类,如下所示:
public function doSave(PropelPDO $con = null) {
parent::doSave($con);
if ($this->getObject()->getIsSiteOwner()) {
$this->getObject()->setType(NULL);
$this->getObject()->save();
foreach($this->getObject()->getUserPartners() as $user_partner) {
$user_partner->delete();
}
}
return $this->getObject();
}
public function updateObject($values = null) {
$obj = parent::updateObject($values);
if ($obj->getIsSiteOwner()) {
$obj->clearUserPartners();
}
return $this->object;
}
这是做什么的:
- 当布尔标志 `is_site_owner` 启动时,它会清除 `type` 字段并**保存**对象(很遗憾我这么久都没有弄清楚这一点)。
- 删除所有现有的 UserPartner 多对多链接对象。
- 清除新关联的(通过 DoubleList)UserPartner 关系。
这是我需要的。感谢所有参与的人。
【问题讨论】:
标签: php symfony1 many-to-many propel