11

私が知る限り、Sequelizejs を使用して、オブジェクト自体が保存されるときにオブジェクトの関連付けを保存する方法はないようです。

たとえば、1 つ以上の phoneNumber を持つことができる連絡先があります。現在、私は協会のために次のようなものを持っています:

global.db.Contact.hasMany(global.db.PhoneNumber, {as: 'phoneNumbers'});

残りのエンドポイントを使用して、新しい連絡先オブジェクト (提供された電話番号を含む) を投稿し、データベースに保存したいと思います。私のリクエストオブジェクトは次のようになります。

{
    firstName: "john",
    lastName: "Doe",
    phoneNumbers: [
        { number: "555-555-5555", type: "home" }
    ]
}

今、私はこのオブジェクトをビルドに渡します:

var contact = Contact.build(req.body);

そして、保存を呼び出します (ビルド/保存の代わりに作成を使用できることはわかっていますが、変更されたデータと変更を行ったユーザーを追跡するためのカスタム ロジックが保存に含まれています)

contact.save();

これにより、意味のある次のエラーがスローされます。

column "phoneNumbers" of relation "Contacts" does not exist

SQL 呼び出しが、存在しない列「phoneNumbers」の値を設定しようとしています。私は明らかにそれをしたくありません...私が作成している連絡先のIDを使用して、配列内の各phoneNumberを一括作成したいと本当に思っています。

私が見つけた唯一の例はこれでした: https://gist.github.com/sdepold/3040391そして、私は本当にこれを行う必要はありません...私は残りのエンドポイントから来ているので、私はこの操作を一般的に行います (関連付けのあるモデルを多数用意します)。また、(他のソースから連絡先をインポートするために) これらの操作を一括で実行できるようにする必要があるため、SQL 呼び出しの量を最小限にすることをお勧めします。誰かがこれを行う良い方法を見つけましたか?

4

2 に答える 2

0

私はこのコードを使用します

var createUser = function(req, reply) {
    db.User.create(req.payload).success(function(user) {
        saveGroups(req, reply, user);
    }).error(function(err) {
        console.error('Error occured', err);
        reply('Error');
    });
};

var saveGroups = function(req, reply, user) {
    db.UserGroup.destroy("user_id=" + user.id).success(function() {
        var groups = req.payload.userGroups;
        if (groups && groups.length > 0) {
            for (var i = 0; i < groups.length; i++) {
                groups[i].user_id = user.id;
            }
            db.UserGroup.bulkCreate(groups).success(function() {
                reply(user);
            }).error(function(err) {
                console.error('Error occured', err);
                reply('Error');
            });
        } else {
            reply(user);
        }
    }).error(function(err) {
        console.error('Error occured', err);
        reply('Error');
    });
};
  • User は、多くの UserGroup を持つモデルです
  • req.payload には JSON が付属します
  • destroy(...) は、最初に関連付けを空にするためにあります (更新を行う場合)
于 2014-05-12T11:04:37.237 に答える