Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtSpRlOtm 145 of 224 menu
◀ ▶

Связь один ко многим в Dart

Связь один ко многим означает: одна строка родителя может иметь много дочерних, а каждая дочерняя указывает ровно на одного родителя. В таблице книг колонка author_id повторяет один и тот же номер автора.

Два автора и три книги с общими внешними ключами оформляют так:

import 'package:sqlite3/sqlite3.dart'; var db = sqlite3.open('otm_books.db'); db.execute('PRAGMA foreign_keys = ON'); db.execute(''' CREATE TABLE IF NOT EXISTS authors ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) '''); db.execute(''' CREATE TABLE IF NOT EXISTS books ( id INTEGER PRIMARY KEY, author_id INTEGER NOT NULL, title TEXT NOT NULL, FOREIGN KEY (author_id) REFERENCES authors (id) ) '''); db.execute( 'INSERT INTO authors (name) VALUES (?)', ['Mira Cole'], ); db.execute( 'INSERT INTO authors (name) VALUES (?)', ['Jon Reed'], ); db.execute( 'INSERT INTO books (author_id, title) VALUES (?, ?)', [1, 'Quiet Harbor'], ); db.execute( 'INSERT INTO books (author_id, title) VALUES (?, ?)', [1, 'Stone Path'], ); db.execute( 'INSERT INTO books (author_id, title) VALUES (?, ?)', [2, 'Wide Field'], ); db.dispose();

Подсчет книг у автора выполняют фильтром по author_id. У первого автора в примере получается две строки:

import 'package:sqlite3/sqlite3.dart'; var db = sqlite3.open('otm_books.db'); db.execute('PRAGMA foreign_keys = ON'); db.execute(''' CREATE TABLE IF NOT EXISTS authors ( id INTEGER PRIMARY KEY, name TEXT NOT NULL ) '''); db.execute(''' CREATE TABLE IF NOT EXISTS books ( id INTEGER PRIMARY KEY, author_id INTEGER NOT NULL, title TEXT NOT NULL, FOREIGN KEY (author_id) REFERENCES authors (id) ) '''); db.execute( 'INSERT INTO authors (name) VALUES (?)', ['Mira Cole'], ); db.execute( 'INSERT INTO books (author_id, title) VALUES (?, ?)', [1, 'Quiet Harbor'], ); db.execute( 'INSERT INTO books (author_id, title) VALUES (?, ?)', [1, 'Stone Path'], ); var rows = db.select( ''' SELECT COUNT(*) AS total FROM books WHERE author_id = ? ''', [1], ); if (rows.isNotEmpty) { print(rows.first['total']); } db.dispose();

В otm_books.db добавьте автора "Eva Nash" и две его книги. Выведите число книг с author_id этого автора.

Создайте otm_brands.db с таблицами brands и models. Одной марке сопоставьте три модели и выведите их названия.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить