/** * @class Ext.data.schema.Reference * @extend Ext.Base * * **This is not a real JavaScript class and cannot be created. This is for documentation purposes only.** * * This documentation is for: * * + {@link Ext.data.field.Field#reference reference config} * * The {@link Ext.data.Model#entityName name} of the entity referenced by this field. * In most databases, this relationship is represented by a "foreign key". That is, a * value for such a field matches the value of the {@link Ext.data.Model#idProperty id} * for an entity of this type. * * Ext.define('MyApp.models.Organization', { * extend: 'Ext.data.Model', * ... * }); * * Ext.define('MyApp.models.User', { * extend: 'Ext.data.Model', * * fields: [ * { name: 'organizationId', reference: 'Organization' } * ], * ... * }); * * If the name of the generated {@link Ext.data.schema.Association association} or other aspects * need to be specified, the `reference` can be an object. The following usage shows * what would be generated by default given the above examples using the string form. * * Ext.define('MyApp.models.User', { * extend: 'Ext.data.Model', * * fields: [{ * name: 'organizationId', * reference: { * type: 'Organization', * association: 'UsersByOrganization', * role: 'organization', * inverse: 'users' * } * }], * ... * }); * * Finally, a `reference` can also describe ownership between the entities. By default, * no ownership relationship is assumed. If, however, the User entities are owned by * their Organization, we could say this: * * Ext.define('MyApp.models.User', { * extend: 'Ext.data.Model', * * fields: [{ * name: 'organizationId', * reference: { * parent: 'Organization' // Organization is the parent of User * } * }], * ... * }); */ /** * @cfg {String} type * The type which this field references. This is the value set by the string form of * `reference`. If the referenced entity has an ownership relationship this field * should be omitted and `reference.parent` or `reference.child` should be specified * instead. */ /** * @cfg {String} association * The name of the association. By default, the name of the association is the * capitalized `inverse` plus "By" plus the capitalized `role`. */ /** * @cfg {String} child * Set this property instead of `reference.type` to indicate that the referenced entity * is an owned child of this entity. That is, the `reference` entity should be deleted * when this entity is deleted. */ /** * @cfg {String} parent * Set this property instead of `reference.type` to indicate that the referenced entity * is the owning parent of this entity. That is, this entity should be deleted when the * `reference` entity is deleted. * */ /** * @cfg {String} role * The name of the role played by the referenced entity. By default, this is the field * name (minus its "Id" suffix if present). */ /** * @cfg {String} [getterName] The name of the getter function. Typically this is generated * based on the {@link #role}. */ /** * @cfg {String} [setterName] The name of the setter function (if required). Typically this is generated * based on the {@link #role}. */ /** * @cfg {Object} [reader] A custom {@link Ext.data.reader.Reader} configuration for reading * nested data. */ /** * @cfg {Boolean} [unique] `true` True for this reference to create a `Ext.data.schema.OneToOne` * relationship. If not specified, the default is `Ext.data.schema.ManyToOne`. */ /** * @cfg {String/Object} inverse * The name of the inverse role (of this entity with respect to the `reference` * entity). By default, this is the {@link Ext.util.Inflector#pluralize pluralized} * name of this entity, unless this `reference` is `unique`, in which case the default * name is the {@link Ext.util.Inflector#singularize singularized} name of this entity. * * This config may also be an object containing a role, getter, or setter. */