Serialization
getMemento
The memento pattern is an established pattern in ColdBox apps. A memento
in this case is a simple representation of your entity using arrays, structs, and simple values.
For instance, the following example shows a User entity and its corresponding memento:
Quick bundles in the excellent Mementifier library to handle converting entities to mementos. This gives you excellent control over serialization using a this.memento
struct on the entity and passing in arguments to the getMemento
function.
this.memento
By default, Quick includes all defined attributes as includes
. You can change this or add other Mementifier options by defining your own this.memento
struct on your entity. Your custom this.memento
struct will be merged with Quick's default, so you can only define what changes you need.
Here is the default Quick memento struct. It is inside the instanceReady()
lifecycle method in this example because retrieveAttributeNames()
relies on the entity being wired (though not loaded); it is not otherwise necessary to put this.memento
inside instanceReady()
.
getMemento Arguments
You can also control the serialization of a memento at call time using Mementifier's getMemento
arguments.
Custom getMemento
If this does not give you the control you need, you can further modify the memento by overriding the getMemento
function on your entity. In this case, a $getMemento
function will be available which is the Mementifier function.
asMemento
Sometimes when retrieving entities or executing a Quick query, you already know you want mementos back. You can skip the step of calling getMemento
yourself or mapping over the array of results returned by calling asMemento
before executing the query. asMemento
takes the same arguments that getMemento
does. It will pass those arguments on and convert your entities to mementos after executing the query. This works for all the query execution methods - find
, first
, get
, paginate
, etc.
$renderData
The $renderData
method is a special method for ColdBox. When returning a model from a handler, this method will be called and the value returned will be used as the serialized response. This let's you simply return an entity from a handler for your API. By default this will call getMemento()
.
QuickCollection
also defines a $renderData
method, which will delegate the call to each entity in the collection and return the array of serialized entities.
Automatically serializing a returned collection only works when using the QuickCollection
as your entity's newCollection
.
asQuery
Quick can skip creating entities all together and return an array of structs from qb using the asQuery
method.
asQuery
also supports Eager Loading. It will add a key matching the relationship name to the returned struct.
Using asQuery
is usually superior to dropping down qb using retrieveQuery
since it achieves the same purpose while also including automatic aliases and eager loading.
Signature
withAliases
boolean
false
true
Use the aliases instead of the column names for the query.
The withAliases
property is recursive across eager loads. If you ask for aliases for your initial query (which is the default), all eager loaded queries will also use their respective column aliases.