如何建立与三个表的关系,SugarOrm

时间:2015-07-09 12:23:57

标签: android relational-database relationship sugarorm

Android 中有3个表扩展了SugarRecord(SugarOrm Library) 1. UserItem 2. AccountItem 3. CommunityItem

每个用户都有一个帐户,一个表来保存用户的地址,电话,一些社交地址,......

我使用的代码是:

UserItem:

int fieldId;
int userId;
String name;
String family;
String cover;
String avatar;

// ==================== RelationShips ...
AccountItem accountItem;
CommunityItem communityItem;
// How to define Get/Set To Relation Items

AccountItem:

int userId;
String authKey;
String authValue;
String userName;
String email;
String password;
String type;
String token;
String url;
String createDate;
String updateDate;

CommunityItem:

int userId;
String phone;
String mobile;
String facebook;
String instagram;
String linkedIn;
String summer;
String website;
String url;
String margin;
String state;
String city;
String address;

但它不起作用,如何定义与此示例的关系?

3 个答案:

答案 0 :(得分:1)

SugarORM目前不支持一对一关系,并且一对多关系的实施并不是特别好:

  
      
  • 我们将尝试改善处理一对多关系的方式

  •   
  • 一对一关系尚不起作用

  •   

来源:Sugar ORM

答案 1 :(得分:1)

您可以在Java代码中设置对象:

UserItem user = new User():
//...
//Setters
//..

AccountItem accountItem = new AccountItem();

//...
//Setters
//..
accountItem.save(); //Make sure you save this registry to your database first.

user.accountItem = accountItem)
user.save();

请记住在UserItem类中使用'public'作为AccountItem属性

答案 2 :(得分:1)

已经很久了,但无论如何...... @satyan在此issue#60建议的最简单的方式来做一对多的关系。 假设一个User有多个Account,可以使用自定义getter来实现,如下所示:

import com.orm.dsl.Ignore;

class User extends SugarRecord<User> {
  private int fieldId;
  private int userId;
  private String name;
  //...
  @Ignore
  private List<Account> accounts;

  public List<Account> getAccounts(){
      return Account.find(Account.class, "user = ?", this.id.toString());
  }  
}

class Account extends SugarRecord<Account> {
  private int userId;
  private String authKey;
  private String authValue;
  //...
  private User user;
}

注意:我们可以添加@Ignore,因为我们不需要保留accounts,因为它由user类中的引用Account处理。一个简单的用法示例如下:

User admin = new User();
admin.userId = 1;
admin.name= "admin";
if (admin.save()){
  Account a1 = new Account();
  a1.userId = 1;
  a1.user = admin;
  if (a1.save()){
    Log.d("TAG", "Account saved.");
  }
}

一对一的关系应该更容易,只需使用参考字段,如documentation所示。

此时的当前版本为1.5。

希望这有帮助!