Flutter SQFlite一对多关系设置

时间:2019-06-05 16:59:36

标签: android sql flutter dart sqflite

我正在创建一个应用,并且需要一个数据库。该数据库包含位置表和兴趣点表。
这是一对多关系。
一个地点有多个景点。
现在我试图用sqflite来实现这种关系,但是失败了。 我已经尝试添加外键,但是没有用。
这只是代码中最重要的部分。

static final String locationTable = 'location';
static final String columnLocationId = 'id';
static final String columnLocationTitle = 'title';  

static final String pointOfInterestTable = 'point_of_interest';
static final String columnPointOfInterestId = 'id';
static final String columnPointOfInterestTitle = 'title';

static final String createTableLocation = 'CREATE TABLE $locationTable('
    '$columnLocationId INTEGER PRIMARY KEY AUTOINCREMENT,'
    '$columnLocationTitle TEXT NOT NULL)';

static final String createTableLocation = 'CREATE TABLE $pointOfInterestTable('
    '$columnPointOfInterestId INTEGER PRIMARY KEY AUTOINCREMENT,'
    '$columnPointOfInterestTitle TEXT NOT NULL)';

Future<List> getPointOfInterestsOfLocations(int id) async {
    final db = await this.db;
    final maps = await db.query(
      locationTable,
      where: '$columnLocationId = ?',
      whereArgs: [id],
    );
    return maps.toList();
}

这是将其加载到列表中的代码行:

List pointOfViews = await _pointOfViewDb.getPointOfInterestsOfLocations(id: location.id);

4 个答案:

答案 0 :(得分:0)

似乎您需要自己在sqlite中启用外键支持。

在sqflite中,您可以定义如下函数:

static Future _onConfigure(Database db) async {
    await db.execute('PRAGMA foreign_keys = ON');
}

并将其添加到您的openDatabase函数中,如下所示:

openDatabase(version: _databaseVersion, onCreate: _onCreate,
             onUpdate: _onUpdate, onDelete: _onDelete,
             onConfigure: _onConfigure);

答案 1 :(得分:0)

SQFlite(Flutter)中的外键关系可以按如下方式完成,

 createTable() async{
  final db = await database;
  var raw = await db.execute("CREATE TABLE MarketInfoes ("
          "id integer primary key, userId integer, typeId integer,"
          "gradeId integer, price DOUBLE" 
          "FOREIGN KEY (typeId) REFERENCES Type (id) ON DELETE NO ACTION ON UPDATE NO ACTION," 
          "FOREIGN KEY (userId) REFERENCES User (id) ON DELETE NO ACTION ON UPDATE NO ACTION," 
          "FOREIGN KEY (gradeId) REFERENCES Grade (id) ON DELETE NO ACTION ON UPDATE NO ACTION"
          ")");
}

答案 2 :(得分:0)

请参见此处,SQLite:使用外键创建表和SQL关系

<Link style={{color:'lightblue'}} to='/dashboard'>داشبورد</Link>

答案 3 :(得分:0)

当您需要使用FOREIGN KEY时,必须将INTEGER引用放入同一sql队列中