私は1つ(手順)から多くの(ツール)の関係を設定しています。手順に関連するすべてのツールを削除したい場合があります。
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'をnullにすることはできません」。掘り下げてみると、このSQLステートメントが準備されていることがわかります。
実行:INSERT INTO procedure_tools(id、procedure_id、tool_id、status_id、itemcount、comment)VALUES(?、?、?、?、?、?)-(、、、、、、)
関連するプロシージャはまだ削除を認識していないように見えます。しかし、これを回避する方法がわかりません。削除は機能しています。2回目の更新で、すべてが正しいです。どんな助けでもありがたいです、ありがとう。
(1)私のシナリオをより正確に表すために編集されました。そもそもそうしなかったことをお詫びします。
(2)関数全体のコンテキストを表示するように編集されました。そこにはさらに多くのロジックがあります(具体的には$ someConditionを評価しますが、現在これは常にtrueと評価されます)。また、オブジェクトを間違った方法で操作している場合に備えて、開始アクションの内容が表示されます。
(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; ?>