Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
examples:builder:hasmany_relation [2021/03/27 15:25] pdsci-admin [Step 1: Add a reference field to the child table] |
examples:builder:hasmany_relation [2021/04/11 19:06] (current) pdsci-admin [Step 4: Announce the relation to the parent model] |
||
|---|---|---|---|
| Line 50: | Line 50: | ||
| For a //hasMany// relation the **child table** requires a field named by the parent model trailed by ' | For a //hasMany// relation the **child table** requires a field named by the parent model trailed by ' | ||
| The table definitions for the //hasMany// relation looks pretty much the same like the //hasOne// definition. The difference is, that the //has Many// child table can hold more than one record with the same key to the parent record.\\ | The table definitions for the //hasMany// relation looks pretty much the same like the //hasOne// definition. The difference is, that the //has Many// child table can hold more than one record with the same key to the parent record.\\ | ||
| - | Here is what the libraray example reviews table looks like:\\ | + | |
| + | Here is what the libraray example reviews table looks like. Notice the last line where the field // | ||
| {{: | {{: | ||
| ===== Step 2: Create a model with list and form for the child table ===== | ===== Step 2: Create a model with list and form for the child table ===== | ||
| Next a child table (// | Next a child table (// | ||
| + | \\ | ||
| + | This is the form for the reviews: | ||
| + | {{: | ||
| + | \\ | ||
| + | \\ | ||
| + | This is the list view for the reviews: | ||
| + | {{: | ||
| + | \\ | ||
| ===== Step 3: Extend the parent controller ===== | ===== Step 3: Extend the parent controller ===== | ||
| Line 76: | Line 84: | ||
| public $implement = [' | public $implement = [' | ||
| ' | ' | ||
| - | ' | + | ' |
| | | ||
| public $listConfig = ' | public $listConfig = ' | ||
| Line 94: | Line 102: | ||
| </ | </ | ||
| \\ | \\ | ||
| - | ===== Step 4: Announce | + | ===== Step 4: Define |
| - | To make the parent model able to work with the relation, the type of the relation, the name of the relation and the child model have to be announced | + | To make the parent model able to work with the relation, the type of the relation, the name of the relation and the child model have to be defined |
| + | \\ | ||
| + | {{: | ||
| + | <WRAP clear /> | ||
| + | \\ | ||
| The required file is placed in plugins /models/ directory. In case of our example the full path is ' | The required file is placed in plugins /models/ directory. In case of our example the full path is ' | ||
| It's only a few lines to add:\\ | It's only a few lines to add:\\ | ||
| Line 104: | Line 115: | ||
| ... | ... | ||
| - | | + | |
| ' | ' | ||
| ]; | ]; | ||
| Line 112: | Line 123: | ||
| In line 4 the public variable ' | In line 4 the public variable ' | ||
| In line 5 ' | In line 5 ' | ||
| + | By default the key field to look for the records with related IDs will be created by the name of the model trailed by ' | ||
| + | \\ | ||
| Remember each definition for a relation is like a table field. A definition can hold several definitions for different relations. Like so:\\ | Remember each definition for a relation is like a table field. A definition can hold several definitions for different relations. Like so:\\ | ||
| <sxh php; highlight: [5-9]> | <sxh php; highlight: [5-9]> | ||
| Line 180: | Line 193: | ||
| label: Reviews | label: Reviews | ||
| view: | view: | ||
| - | | + | |
| toolbarButtons: | toolbarButtons: | ||
| manage: | manage: | ||
| form: $/ | form: $/ | ||
| - | | + | |
| ... | ... | ||
| </ | </ | ||
| Line 202: | Line 214: | ||
| \\ | \\ | ||
| \\ | \\ | ||
| - | This is the screenshot for the example above:\\ | + | This is the screenshot for the example above - notice that a definition is already set (see the hasOne example):\\ |
| - | /* {{: | + | {{: |
| <WRAP clear /> | <WRAP clear /> | ||
| \\ | \\ | ||
| Line 218: | Line 230: | ||
| See this screenshot too:\\ | See this screenshot too:\\ | ||
| - | /* {{: | + | {{: |
| <WRAP clear /> | <WRAP clear /> | ||
| \\ | \\ | ||
| Line 227: | Line 239: | ||
| So we return to Builder > Models > Book > Forms > field.yaml an add a widget //Partial// displaying and managing the created relation.\\ | So we return to Builder > Models > Book > Forms > field.yaml an add a widget //Partial// displaying and managing the created relation.\\ | ||
| The field name we have to refer to is // | The field name we have to refer to is // | ||
| - | Notice the ' | + | Notice the ' |
| - | /* {{: | + | \\ |
| + | {{: | ||
| <WRAP clear /> | <WRAP clear /> | ||
| \\ | \\ | ||
| Now the form is ready to create, show, edit, delete, link and unlink a record from the child table within/to a record of the parent table. | Now the form is ready to create, show, edit, delete, link and unlink a record from the child table within/to a record of the parent table. | ||
| ---- | ---- | ||