我有一個(過程)到很多(工具)關係的設置。有時候我想刪除與過程相關聯的所有工具:object-> delete()在相關對象上不會立即持久
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,評論)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; ?>
這是個好主意,謝謝。我真的專注於弄清楚爲什麼我得到錯誤,我沒有考慮替代方案。我剛剛實施了這個建議,並引入了一個新問題。刪除項目後,操作將重定向到「顯示」視圖。該視圖不會被刪除更新。如果我刷新然後我看到他們,但最初的觀點是沒有得到消息。也許我需要保存工具表...? – Charles 2012-07-27 13:22:27
在'foreach'(主要涉及到'$ aProcedure')之前更新你的問題,你在'show'視圖中顯示什麼。 – j0k 2012-07-27 13:29:19
我已經更新了我的答案。 – j0k 2012-07-27 14:34:07