Changes between Version 13 and Version 14 of DeveloperGuidelines/EdenMobile/Database


Ignore:
Timestamp:
03/15/17 12:04:12 (8 years ago)
Author:
Dominic König
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DeveloperGuidelines/EdenMobile/Database

    v13 v14  
    109109
    110110'''$emDB''' uses the {{{emSQL}}} service to construct common SQL statements. It can be found in www/services/sql.js.
     111
     112== Components ==
     113
     114Components are supported (currently only direct foreign-key relationships).
     115
     116Components must be declared in the master table schema (see Table Schema Format).
     117
     118== Table Schema Format ==
     119
     120The following format is used for both emDefaultSchema, and schema imports (as JSON).
     121
     122{{{#!js
     123var tableSchema = {
     124
     125    // The table name
     126    _name: 'person',
     127
     128    // Fields in the table
     129    'first_name': {             // Field name (key)
     130        type: 'string',         // Field type (required)
     131        label: 'First Name',    // Label in form
     132        placeholder: 'Jane',    // Placeholder (text fields only)
     133        notnull: true           // NOT NULL constraint
     134    },
     135    'last_name': {
     136        type: 'string',
     137        label: 'Last Name',
     138        placeholder: 'Doe'
     139    },
     140    'date_of_birth': {
     141        type: 'date',
     142        label: 'Date of Birth'
     143    },
     144    'missing': {
     145        type: 'boolean',
     146        label: 'Missing'
     147    },
     148    'gender': {
     149        type: 'integer',
     150        label: 'Gender',
     151        options: {2: 'female',  // Fixed set of options
     152                  3: 'male'     // value: label
     153                  },
     154        defaultValue: 2         // Default value
     155    },
     156
     157    // Fields in the form (in order)
     158    _form: [
     159        'first_name',
     160        'last_name',
     161        'gender',
     162        'missing',
     163        'date_of_birth'
     164    ],
     165
     166    // Data list card template
     167    _card: {
     168
     169        // Fields to extract (analogous to "list_fields", required)
     170        fields: ['first_name', 'last_name'],
     171
     172        // AngularJS expression for the card title
     173        title: '{{record.first_name}} {{record.last_name}}'
     174    },
     175
     176    // CRUD strings and icons
     177    _strings: {
     178
     179        // name and namePlural will be used as page titles
     180        name: 'Person',
     181        namePlural: 'Persons',
     182
     183        // Icon for the form list
     184        icon: 'ion-person-stalker'
     185    },
     186
     187    // Component declaration
     188    _components: {
     189
     190        'photo': {                      // Component name (alias)
     191            title: 'Photos',            // Component title ("tab" title)
     192            resource: 'person_photo',   // Component table name (required)
     193            joinby: 'person_id',        // Name of the the joinby-key (required)
     194            multiple: true              // Multiple-setting (default true)
     195        }
     196    }
     197},
     198
     199{
     200    // Component table
     201    _name: 'person_photo',
     202
     203    'person_id': {
     204
     205        // Lookup-field (component key)
     206        type: 'reference person',       
     207        notnull: true,
     208
     209        // Representation of foreign keys:
     210        // - list of field names, values will be concatenated
     211        //   in order, separated by blanks
     212        represent: ['first_name', 'last_name']
     213
     214    },
     215    'photo': {
     216
     217        // Upload-fields automatically use photo widget
     218        type: 'upload'                 
     219    }
     220}
     221}}}