Docs: Update Dynamic_Default_Fields.md (#8941)

This commit is contained in:
Adrian Humphreys 2019-04-29 10:21:13 +12:00 committed by Robbie Averill
parent 6d271f0a18
commit 4155b9f483

View File

@ -1,7 +1,27 @@
# Dynamic Default Values # Default Values and Records
The [DataObject::$defaults](api:SilverStripe\ORM\DataObject::$defaults) array allows you to specify simple static values to be the default values when a ## Static Default Values
record is created, but in many situations default values need to be dynamically calculated. In order to do this, the The [DataObject::$defaults](api:SilverStripe\ORM\DataObject::$defaults) array allows you to specify simple static values to be the default values when a record is created.
A simple example is if you have a dog and by default it's bark is "Woof":
```php
use SilverStripe\ORM\DataObject;
class Dog extends DataObject
{
private static $db = [
'Bark' => 'Varchar(10)',
];
private static $defaults = [
'Bark' => 'Woof',
];
}
```
## Dynamic Default Values
In many situations default values need to be dynamically calculated. In order to do this, the
[DataObject::populateDefaults()](api:SilverStripe\ORM\DataObject::populateDefaults()) method will need to be overloaded. [DataObject::populateDefaults()](api:SilverStripe\ORM\DataObject::populateDefaults()) method will need to be overloaded.
This method is called whenever a new record is instantiated, and you must be sure to call the method on the parent This method is called whenever a new record is instantiated, and you must be sure to call the method on the parent
@ -38,3 +58,24 @@ public function populateDefaults()
parent::populateDefaults(); parent::populateDefaults();
} }
``` ```
## Static Default Records
The [DataObject::$default_records](api:SilverStripe\ORM\DataObject::$default_records) array allows you to specify default records created on dev/build.
A simple example of this is having a region model and wanting a list of regions created when the site is built:
```php
use SilverStripe\ORM\DataObject;
class Region extends DataObject
{
private static $db = [
'Title' => 'Varchar(45)',
];
private static $default_records = [
['Title' => 'Auckland'],
['Title' => 'Coromandel'],
['Title' => 'Waikato'],
];
}
```