2016-10-20 15 views
0

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が削除さ」を与えます。

答えて

0

私が使用しているので>は、私はまたの$ this - 」のポストを「解除」を持っている「saveAssociated」要求 - >データ "を入力します。それ以外の場合は再度保存されます。

$this->loadmodel('Post'); 

foreach ($this->request->data['Post'] as $i => $post) { 

if ($post['message'] == '') { 
    unset($this->request->data['Post'][$i]); 

if ($this->Post->delete($post['id'], false)) { 
    echo "Post id : " . $i . ' - Deleted'; 
} else { 
    echo "Post id : " . $i . ' - Not deleted'; 
} 
} 
0

メッセージがこのような空である場合は、あなたのbeforeSave内のデータの設定を解除することができます

public function beforeSave($options = array()) { 

    foreach ($this->data['Post'] as $i => $post) { 
     if ($post['message'] == '') { 
      unset($this-data['Post'][$i]); 
     } 
    } 
} 
+0

ご返信ありがとうございますが、私はうまくいきません。 ($ this-> data ['Post']); ($ this-> data ['Post']); } – flaggalagga

+0

最後のコメントは編集できませんので、ここに追加する必要があります。モデルの各ポストを通過する必要がないので、ポストモデル用に書いたコードはわかりません。とにかく各投稿ごとに呼び出されています。 – flaggalagga

+0

モデル内の各ポストを通過していません。 'beforeSave'の' $ this-> data'は、保存しようとしているデータを表します。ここでは、メッセージを保存する前に空のメッセージがある投稿を削除するという考え方です。より良いアイデアは、メッセージフィールドが空ではないことを要求するいくつかのモデルの検証を追加することでしょう。 http://book.cakephp.org/2.0/en/models/data-validation.html – bill

関連する問題