我有两个表:步骤和链接加入 1:n。我的目标是通过步骤对象维护链接。我从数据库中检索所有步骤并使用链接表填充关系。我保留包含指向 JSON 的链接集合的 step 对象,并使用 REST 将其返回到前端。
这意味着,如果一个步骤与前端的另一个步骤链接或取消链接,我会将整个步骤发送回后端,包括一组链接。在后端,我使用以下代码:
public function put($processStep) {
if (isset($processStep['Processesid']) && isset($processStep['Coordx']) && isset($processStep['Coordy'])) {
$p = $this->query->findPK($processStep['Id']);
$p->setId($processStep['Id']);
$p->setProcessesid($processStep['Processesid']);
if (isset($processStep['Flowid'])) $p->setFlowid($processStep['Flowid']);
if (isset($processStep['Applicationid'])) $p->setApplicationid($processStep['Applicationid']);
$p->setCoordx($processStep['Coordx']);
$p->setCoordy($processStep['Coordy']);
$links = $p->getLinksRelatedByFromstep();
$links->clear();
foreach ($processStep['Links'] as $link) {
if (!isset($link['Linkid'])) {
$newLink = new \Link();
$newLink->setFromstep($link['Fromstep']);
$newLink->setTostep($link['Tostep']);
$links->prepend($newLink);
}
}
$p->save();
return $p;
} else {
throw new Exceptions\ProcessStepException("Missing mandatory fields.", 1);
}
}
我基本上是从一个步骤中删除每个链接,并根据我重新创建链接的请求对象。这让我省去了比较删除和添加哪些链接的工作。插入工作就像一个魅力 Propel 会自动创建新链接。事情是它不会像插入那样删除。我检查了被持久化的对象($p),我看到链接被删除,但在 MySQL 日志中,Propel 绝对没有执行任何操作。看起来链接集合中缺少的成员不会触发脏标志或类似的东西。
也许我的方法是错误的,我希望有人能提供一些建议。
谢谢