web-dev-qa-db-fra.com

Flutter SQFLITE un à de nombreuses relations

Je crée une application et j'ai besoin d'une base de données. La base de données contient une table d'emplacement et une table de points d'intérêt.
[.____] C'est une relation une à de nombreuses relations.
[.____] Un emplacement a plusieurs points d'intérêt.
Maintenant, j'ai essayé de faire cette relation dans le flutter avec Sqflite, mais j'ai échoué. J'ai déjà essayé d'ajouter une clé étrangère, mais cela n'a pas fonctionné.
[.____] Ce n'est que la partie la plus importante du code.

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();
}

Et ceci est la ligne de code pour le charger dans une liste:

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

Il semble que vous ayez besoin d'activer le support de clé étrangère dans SQLITE vous-même.

Dans SQFLITE, vous pouvez définir une fonction comme si:

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

et ajoutez-le à votre fonction OpenDatabase comme si:

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

La relation clé étrangère dans SQFLITE (flutter) peut être effectuée comme suit,

 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"
          ")");
}
1
Abdulhakim Zeinu

Voir ici, SQLite: Créez des tableaux et des relations SQL avec des clés étrangères

https://www.techiediaries.com/sqlite-create-table-foreign-key-relationships/
1
Messou

Lorsque vous devez utiliser la clé étrangère, vous devez mettre la référence entière dans la même file d'attente SQL.

0
Beloin Sena