在种子文件类型上苦苦挣扎。有一个问题。原因:无法推断值的类型

Struggling with type Document on seeding. There was an issue. Reason: Could not infer type of value

我有一个这样定义的列:

@Column(nullable: true)
Document openHours; // List "openHours": ["Tuesday - Sunday: 11.00 - 21.00"],

在我的迁移文件中我使用 seed():

@override
Future seed() async {
const sClientSQL = ...

而让我失望的 json 部分是:

"openHours": [
    "Monday - Friday: 17.00 - 22.00",
    "Saturday: 14:00 - 23:00",
    "Sunday & Holidays: 11:30 - 22:00"
  ],

终端错误如下:

Seeding data from migration version 1...
*** There was an issue. Reason: Could not infer type of value '[Monday - Friday: 17.00 - 22.00,    
Saturday: 14:00 - 23:00, Sunday & Holidays: 11:30 - 22:00]'.. Table: null Column: null

文档说:

Document    map or list (Map<String, dynamic> or List<dynamic>)

JSON 对我来说看起来不错,但显然在这种情况下它是错误的。那我在这里做错了什么?我找不到关于如何为 aqueduct 中的 Document 类型编写 json 部分的示例。

感谢大家的问候 安东尼奥

[编辑 4]

这是一个简短的查询示例:

const sClientSQL = 'INSERT INTO _Clients (name, owner, address, contacts, openhours, dayOff, description) VALUES (@name, @owner, @address, @contacts, @openhours, @dayOff, @description)';

await database.store.execute(sClientSQL, substitutionValues: {
  'name': 'Dolce Vita',
  'owner': 'David Driss',
  'address': {
    'street': 'Johannisstr. 3',
    'zipCode': '54290',
    'city': 'Trier'
  },
  'contacts': {
    'phone': '0651 94 90 40',
    'fax': '0651 43 23 2',
    'mail': 'info@dolcevita.de'
  },   
  'openhours': [
    "Montag - Freitag: 17.00 - 22.00",
    "Samstag: 14:00 - 23:00",
    "Sonntag & Feiertag: 11:30 - 22:00"
  ],
  'dayOff': '',
  'description': 'Alle Speisen und Getränke sind inkl. MwST. Extrazutaten werden gesondert berechnet'
});

[编辑 1]

更多信息:

替代值如地图所示。

我用的是双引号,改成单引号,没有效果。

[编辑 2]

在 dartpad 中尝试了复杂的地图并创建了一个要点来展示:

Gist to Dart Maps sample 将代码放入 dartpad。

结果地图原样有效。

[编辑 3]

  1. 我删除了所有 json 列以确保其正常工作。成功。
  2. 添加了一个 json 列,这是我之前展示的第一个示例。同样的问题
  3. 试图手动插入 jsonb 列。成功。

所以,只有 await database.store.execute 命令不需要我的 json 类型文字。

在其他频道用户的帮助下,我终于弄明白了如何让它发挥作用。

神奇之处在于使用正确的语法,经过多次试验和错误,想知道在哪里可以找到有关它的文档?

  • 使用多行时,在开头和结尾使用三个单引号 '''
  • 在多行表达式中,对 json
  • 使用双引号

工作示例

substitutionValues 中 "fields" 之后的所有内容都是数据库中的 jsonb 列

  • 地址联系人是json对象
  • 的示例
  • openhours 是 json 字符串数组的示例,多行
  • fess 是 json 对象数组的示例,多行
await database.store.execute(sClientSQL, substitutionValues: {
  'address': {
    'street': 'a street',
    'zipCode': '123456',
    'city': 'mycity'
  },
  'contacts': {
    'phone': '12345678',
    'fax': '12346578',
    'mail': 'info@mydomain.com'
  },         
  'openhours': '''[
    "Monday - Friday: 17.00 - 22.00",
    "Saturday: 14:00 - 23:00",
    "Sunday: 11:30 - 22:00"
  ]''', 
  'fees': '''[
    {"delivery": 2.00, "minOrder": 7.50, "location": "all"},
    {"delivery": 2.50, "minOrder": 9.50, "location": "here"},
    {"delivery": 2.50, "minOrder": 9.50, "location": "there"}
  ]''',

我认为有了这些我们就可以解决所有的复杂问题。