我建立了一个(程序)对多(工具)的关系。有时我想删除与过程相关的所有工具:
class Procedure extends BaseProcedure
{
...
function deleteTools()
{
$aProcedure = $this;
$someCondition = true;
foreach( $aProcedure->getTools() as $tool )
{
if($someCondition) {
$tool->delete();
}
}
$aProcedure->save(); // Right Here!
}
}
class ProcedureActions extends sfActions
{
...
public function executeTest(sfWebRequest $request)
{
$this->procedure = $this->getRoute()->getObject();
$this->procedure->deleteTools();
$this->action = "show";
$this->setTemplate("show", "procedure");
}
}
在这一行,我收到以下错误消息:
“SQLSTATE [23000]:违反完整性约束:1048 列 'procedure_id' 不能为空”。挖掘了一下,我看到这个 sql 语句正在准备中。
执行:INSERT INTO procedure_tools (id, procedure_id, tool_id, status_id, itemcount, comment) VALUES (?, ?, ?, ?, ?, ?) - (, , , , , )
在我看来,相关程序还不知道删除。我不知道如何解决这个问题。删除工作正常。第二次刷新,一切正常。任何帮助表示赞赏,谢谢。
(1)编辑以澄清更准确地代表我的场景。很抱歉一开始没有这样做。
(2)编辑以显示整个函数的上下文。那里会有更多的逻辑(特别是评估 $someCondition,但目前这总是评估为真)。还会显示启动动作的内容,以防我以错误的方式召唤对象。
(3)编辑添加,来自 showSuccess 模板的代码。
<?php foreach($procedure->getTools() as $tool): ?>
<tr>
<td><?php echo $tool->getId() ?></td>
<td><?php echo $tool->getStatus() ?></td>
<td><?php echo $tool->getName() ?></td>
</tr>
<?php endforeach; ?>