2012-03-19 11 views
2

私は、Sencha Touch 2.0 hasMany associationsの作業にはかなりの時間を費やしてきました。特にデータモデルが多対多の関係を直接許可していないように見えます。私は2つのモデルを持っています - 人々とロール(もっとたくさんありますが、これらはこの例で重要な2つです)、それぞれは多対多を持っています。Sencha touch 2.0の多対多関連 - どのように?

私はもともと、各モデルのhasManyでこれを行うことができると思っていましたが、データがデータベースの3番目の正規の形式で格納されていたので、3番目のperson-to-roleモデル。コードはここにある:

Ext.define('SMToolkit.model.Person', { 
    extend: 'Ext.data.Model', 
    config: { 
     fields: [ 
      'id', 
      'first_name', 
      'last_name', 
      'email', 
      'address', 
      'phone1', 
      'phone2', 
      'type', 
      'location' 
     ], 
     hasMany: [ 
      { 
       model: 'SMToolkit.model.Person_Role', 
       name: 'role' 
      } 
     ], 
     proxy: { 
      type: 'rest', 
      url : 'index.php/api/persons' 
     } 
    } 

}); 


Ext.define('SMToolkit.model.Role', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: [ 
      'id', 
      'name', 
      'description', 
      'type', 
      'show_id' 
     ], 
     hasMany: [ 
      { 
       model: 'SMToolkit.model.Person_Role', 
       name: 'person' 
      }, 
      { 
       model: 'SMToolkit.model.Scene_Role', 
       name: 'scene' 
      }, 
      { 
       model: 'SMToolkit.model.Thing', 
       name: 'thing' 
      } 
     ], 
     proxy: { 
      type: 'rest', 
      url : 'index.php/api/roles' 
     } 
    } 
}); 


Ext.define('SMToolkit.model.Person_Role', { 
extend: 'Ext.data.Model', 

config: { 
    fields: [ 
     'person_id', 
     'role_id' 
    ], 
    associations: [ 
     { 
      type: 'belongsTo', 
      model: 'SMToolkit.model.Person', 
      name: 'person' 
     }, 
     { 
      type: 'belongsTo', 
      model: 'SMToolkit.model.Role', 
      name: 'role' 
     }, 
    ], 
    proxy: { 
     type: 'rest', 
     url : 'index.php/api/personsroles' 
    } 
} 

}); 

...私はpersonsroles URLが上記の実際に有効なデータセットを返すないことが確認できましたので、私はそこに何かがなければならないことを知っている

私が見てロールレコード、関連するストアのフィールドを見ることができますが、データベースのPerson_Roleテーブルに適切なレコードがあることがわかっていても、レコードのPersons配列は空です。

私はそうのようなレコードを取得しています:

onRoleSelect: function(list, index, node, record) { 
    var editButton = this.getEditButton(); 
    if (!this.showRole) { 
     this.showRole = Ext.create('SMToolkit.view.role.Show'); 
    } 
    person = record.person(); 
    thing = record.thing(); 
    scene = record.scene(); 
    person.load(); 
    thing.load(); 
    scene.load(); 
    // Bind the record onto the view 
    this.showRole.setRecord(record); 

    // Push the show show view into the navigation view 
    this.getRoleContainer().push(this.showRole); 
}, 

は私が間違って何をやっているの?関連データがないのはなぜですか?

+0

さらに問題を複雑にするために、私は上記のassociatin人を得ることができたとしても、それはちょうど私Person_Roleのレコードを与えるだろうと私はそこからトラバースする方法がわかりません実際の人物の記録 –

答えて

関連する問題