0

だから多分私は何かが足りないだけです。SaveAll データは正常に動作します... beforeSave を取り出すか、すべてが保存されていても true を返すだけです。私がやろうとしているのは、user_group_id/user_friend_id の組み合わせが既に存在するかどうかを確認することです。保存しない場合。

ただし、1 つのレコードに対して false を返すと、saveAll 関数全体が実行を終了するようです。多分これは意図的なものですか?公式ドキュメントは、これに答えるのに少し制限されています。

明らかに、チェックを関数に移動できますが、これはすべての挿入/更新をカバーする方が良いようです。

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;
    }
4

2 に答える 2

1

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

于 2012-04-16T08:25:36.797 に答える
0

これを行うためのより侵襲的でない(そしておそらくより予測可能な)方法は、フレームワークにそれを処理させることです。検証を手動でハッキングする代わりに、Cakeに任せてください。にカスタム検証ルールを作成してUserFriendGroup、これら2つのフィールドの一意性を検証すると、saveAll()メソッドは通常どおり機能します。これは、通常の検証実行中に検証するための別の方法です。

バージョンを指定しなかったため、Cake 1.3のカスタム検証ルールにリンクしましたが、2.xには非常によく似たものがあると確信しています。

于 2012-04-16T11:27:40.240 に答える