2つのテーブル「トピック」と「投稿」がhasManyによってモデルにリンクされていますCakephpの基準に基づいてサブレコードを削除するには?
メッセージがないので、id = 3の投稿エントリを削除します。
public function beforeSave($options = array()) {
if ($this->data['Post']['message'] == '') {
CODE TO DELETE HERE
}
}
これは私の$ this - >要求 - >データです:
Array
(
[Topic] => Array
(
[id] => 1
[topic_title] => This is my topic
)
[Post] => Array
(
[1] => Array
(
[id] => 1
[title] => Blah
[message] => My message
)
[2] => Array
(
[id] => 2
[title] => Second Blah
[message] => Second My message
)
[3] => Array
(
[id] => 3
[title] => Second Blah
[message] =>
)
)
)
私はできませんテーブル "ポスト" のモデルでは、私はこの "beforeSave" を持っている
モデルの削除方法を理解するか、これが間違ったアプローチですか?
私は今もsaveAssociated前のコントローラでこれを試してみた:
$this->loadmodel('Post');
foreach ($this->request->data['Post'] as $i => $post) {
if ($post['message'] == '') {
unset($this->request->data['Post'][$i]);
$options = array('conditions' => array('Post.id' => $i));
$this->Post->find('first', $options);
if ($this->Post->delete()) {
echo "Post id : " . $i . ' - Deleted';
} else {
echo "Post id : " . $i . ' - Not deleted';
}
}
}
これは私がしかし、ポストレコードが削除されていない「ポストのID xxxが削除さ」を与えます。
ご返信ありがとうございますが、私はうまくいきません。 ($ this-> data ['Post']); ($ this-> data ['Post']); } – flaggalagga
最後のコメントは編集できませんので、ここに追加する必要があります。モデルの各ポストを通過する必要がないので、ポストモデル用に書いたコードはわかりません。とにかく各投稿ごとに呼び出されています。 – flaggalagga
モデル内の各ポストを通過していません。 'beforeSave'の' $ this-> data'は、保存しようとしているデータを表します。ここでは、メッセージを保存する前に空のメッセージがある投稿を削除するという考え方です。より良いアイデアは、メッセージフィールドが空ではないことを要求するいくつかのモデルの検証を追加することでしょう。 http://book.cakephp.org/2.0/en/models/data-validation.html – bill