gpt4 book ai didi

PHP/Propel删除记录1 :n

转载 作者:行者123 更新时间:2023-11-29 10:58:57 25 4
gpt4 key购买 nike

我有两个表:步骤和连接 1:n 的链接。我的目标是通过步骤对象维护链接。我从数据库中检索所有步骤并使用链接表填充关系。我保留了包含 JSON 链接集合的步骤对象,并使用 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 绝对没有执行任何操作。看起来链接集合中丢失的成员不会触发脏标志或类似的东西。

也许我的做法是错误的,希望有人能提供一些建议。

谢谢

最佳答案

要删除记录,您绝对必须使用delete。在确定需要添加、更新和删除哪些实体时,集合上的 diff 方法非常有用。

关于PHP/Propel删除记录1 :n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42580634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com