2012-04-16 4 views
0

多分私は何かを見逃しています。 SaveAllデータは正常に動作します。もしbeforeSaveを取り出したり、すべてが保存されていてもtrueを返すとしたら、私がしようとしているのは、user_group_id/user_friend_idの組み合わせがすべて存在するかどうかをチェックすることです。それが保存されない場合。保存する前にcakephp saveallを中断した場合falseを返します

しかし、saveAll関数全体が実行を終了する1つのレコードに対してfalseを返すと思われます。多分これは意図的なのでしょうか?公式文書はこれに答えるために限定されている。

明らかに私は小切手を機能に移すことができましたが、これはすべての挿入/更新をカバーする方が良いようでした。

function beforeSave($options) { 
     //dont let any duplicates be saved 
     $count = $this->find('count', array(
      'conditions' => array(
       'user_group_id' => $this->data['UserGroupFriend']['user_group_id'], 
       'user_friend_id' => $this->data['UserGroupFriend']['user_friend_id'], 
      ))); 
     if ($count) 
      return false; 
     else 
      return true; 
    } 

答えて

1

beforeSave()では、無効な値のため$this->dataをチェックし、見つかった場合は、それらを削除するには$this->dataを変更することができます。次にtrueを返し、まだ$this->dataに存在するデータだけが保存されます。

0

これを行う方法としては、侵略的ではなく(おそらく予測可能な)方法は、フレームワークによって処理されるようにすることです。手動で妥当性検査を一緒にハッキングするのではなく、Cakeに任せてください。 UserFriendGroupcustom validation ruleを作成して、これらの2つのフィールドの一意性を検証してから、saveAll()メソッドは通常どおり動作します。これは、通常の検証実行中に検証するためのものです。

バージョンを指定していないので、Cake 1.3のカスタム検証ルールにリンクしましたが、2.xは非常に似ています。

関連する問題