PHP/Propel删除记录1 :n

标签 php mysql orm propel propel2

我有两个表:步骤和连接 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/

相关文章:

PHP最便宜的方法如何检查远程图像是否存在

php - 从 MySQL 生成的复选框列表生成 "checked"复选框的问题

php - 如何从表中获取第一行和其他随机行

php - Joomla 下拉菜单

php - Laravel 一对一关系错误不知道为什么?

mysql - 如果不存在则插入,如果存在且条件为真则更新

mysql - 获取mysql列中的天数

python - 如何将新的 ".where()"添加到现有的 peewee 查询中?

java - 如何在 Hibernate 中执行非多态 HQL 查询?

java - JPA Embeddable 可以具有 ElementCollection<Embeddable> 属性