UNPKG

keystone

Version:

Web Application Framework and Admin GUI / Content Management System built on Express.js and Mongoose

93 lines (57 loc) 2.47 kB
# Relationship Field Stores an `ObjectID` in the model, which belongs to another List in the system. When the `many: true` option is set, it stores an Array `[ObjectID]` instead. Displayed as an auto-suggest field in the Admin UI. Specify the related Model using the `ref` option. For a many-many relationship, set the `many` option to `true`. ## Example Linking to a **Post** model to a single **Author** and many **PostCategories** can be done like this: ```js Post.add({ author: { type: Types.Relationship, ref: 'User' }, categories: { type: Types.Relationship, ref: 'PostCategory', many: true } }); ``` ## Methods ### `getExpandedData()` Expands the stored value into an object containing `{ id, name }` properties. The name is set by the `getDocumentName` method on the related List. In `many` mode, an array of objects `[{ id, name }]` is returned. The relationship path must be populated or this method will return unexpected results. #### Example ```js Post.model.findOne(id) .populate('author') // author is a relationship to the User list .exec((err, post) => { post._.author.getExpandedData() // { id: '1', name: 'Jed Watson' } }); ``` ### `format` Returns the stored value as a `String`. In `many` mode, the values in the array will be joined into a comma, space delimited list. Will return unexpected results if the relationship path has been populated. ### `updateItem` Updates with the provided value if it is different from the stored value. `undefined` values are ignored. When `null` is passed, mongoose will remove the path from the stored document and the value will be `undefined` when the item is next retrieved. This behaviour is different in `many` mode, when an empty array will be stored. ### `validateInput` Ensures the value, if provided, is a string (or an array of strings in `many` mode). Allows `null` to clear the field value. ### `validateRequiredInput` Ensures a value has been provided. Empty strings are not valid. ## Filtering Accepts a value (is an array of ObjectIDs), and can be inverted. Will match any items containing a relationship to _any_ of the provided ObjectIDs in the value array. ``` { inverted: Boolean, value: [ObjectID], } ``` An empty `value` will match items containing `null` (single) or `[]` (many) stored in the field path. Inverting the filter finds all items **not** matching the value. Default filter arguments are: ``` { inverted: false, value: [], } ```