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:09] pdsci-admin [The hasMany relation] |
examples:builder:hasmany_relation [2021/04/11 19:06] (current) pdsci-admin [Step 4: Announce the relation to the parent model] |
||
|---|---|---|---|
| Line 48: | Line 48: | ||
| * the respective **model** is named **// | * the respective **model** is named **// | ||
| * The **controller** for the child is named // | * The **controller** for the child is named // | ||
| - | 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 ' |
| - | So the table definitions for te //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.\\ |
| - | ===== Step 2: Create a model with list and form for the child table ===== | + | Here is what the libraray example reviews |
| - | Next for the child table (// | + | {{: |
| + | ===== Step 2: Create a model with list and form for the 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 74: | Line 84: | ||
| public $implement = [' | public $implement = [' | ||
| ' | ' | ||
| - | ' | + | ' |
| | | ||
| public $listConfig = ' | public $listConfig = ' | ||
| Line 92: | 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 102: | Line 115: | ||
| ... | ... | ||
| - | | + | |
| ' | ' | ||
| ]; | ]; | ||
| Line 110: | 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 178: | Line 193: | ||
| label: Reviews | label: Reviews | ||
| view: | view: | ||
| - | | + | |
| toolbarButtons: | toolbarButtons: | ||
| manage: | manage: | ||
| form: $/ | form: $/ | ||
| - | | + | |
| ... | ... | ||
| </ | </ | ||
| Line 200: | 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 216: | Line 230: | ||
| See this screenshot too:\\ | See this screenshot too:\\ | ||
| - | /* {{: | + | {{: |
| <WRAP clear /> | <WRAP clear /> | ||
| \\ | \\ | ||
| Line 225: | 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. | ||
| ---- | ---- | ||