examples:builder:hasmany_relation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
examples:builder:hasmany_relation [2021/03/27 15:31]
pdsci-admin [Step 2: Create a model with list and form for 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 84: Line 84:
     public $implement = ['Backend\Behaviors\ListController',     public $implement = ['Backend\Behaviors\ListController',
                          'Backend\Behaviors\FormController',                          'Backend\Behaviors\FormController',
-                         'Backend\Behaviour\RelationController']; // this line adds the relation behaviour+                         'Backend\Behaviors\RelationController']; // this line adds the relation behaviour
          
     public $listConfig = 'config_list.yaml';     public $listConfig = 'config_list.yaml';
Line 102: Line 102:
 </sxh> </sxh>
 \\ \\
-===== Step 4: Announce the relation to the parent model ===== +===== Step 4: Define the relation within the parent model ===== 
-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 in the parent model. \\ +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 in the parent model. \\ 
 +\\ 
 +{{:examples:builder:hasmany-relation-definition.jpg?direct&960|}} 
 +<WRAP clear /> 
 +\\
 The required file is placed in plugins /models/ directory. In case of our example the full path is 'pds/library/models/book.php'.\\ The required file is placed in plugins /models/ directory. In case of our example the full path is 'pds/library/models/book.php'.\\
 It's only a few lines to add:\\ It's only a few lines to add:\\
Line 112: Line 115:
    ...    ...
        
-   public $hasOne = [+   public $hasMany = [
         'reviews' => ['Pds\Library\Models\Review']         'reviews' => ['Pds\Library\Models\Review']
    ];    ];
Line 120: Line 123:
 In line 4 the public variable '$hasMany' is the type of relation, to let OctoberCMS know which relations to take care for in this model.\\ In line 4 the public variable '$hasMany' is the type of relation, to let OctoberCMS know which relations to take care for in this model.\\
 In line 5 'reviews' is the name of the relation, which can be used similar to a table field name. The path assigned to the name of the relation is the path to the model of the child table.\\ In line 5 'reviews' is the name of the relation, which can be used similar to a table field name. The path assigned to the name of the relation is the path to the model of the child table.\\
 +By default the key field to look for the records with related IDs will be created by the name of the model trailed by '_id'. In our example this would be 'book_id'.\\
 +\\
 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 188: Line 193:
     label: Reviews     label: Reviews
     view:      view: 
-        form: $/pds/library/models/review/fields.yaml+        list: $/pds/library/models/review/columns.yaml
         toolbarButtons: create|delete         toolbarButtons: create|delete
     manage:     manage:
         form: $/pds/library/models/review/fields.yaml         form: $/pds/library/models/review/fields.yaml
-        list: $/pds/library/models/review/columns.yaml +        
 ... ...
 </sxh> </sxh>
Line 210: 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):\\ 
-/* {{:examples:builder:pds_library_controllers_config_relation.yaml.jpg?direct&960 |}} */+{{:examples:builder:hasmany-config-relation.jpg?direct&960|}}
 <WRAP clear /> <WRAP clear />
 \\ \\
Line 226: Line 230:
  
 See this screenshot too:\\ See this screenshot too:\\
-/* {{:examples:builder:pds_library_controllers_config_relation_create3.jpg?direct&960 |}} */+{{:examples:builder:hasmany-relation-partial.jpg?direct&960|}}
 <WRAP clear /> <WRAP clear />
 \\ \\
Line 235: 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 //**review**// as defined before. The partial to display is the one defined in step 6: //**$/pds/library/controllers/books/_field_reviews.htm**// \\ The field name we have to refer to is //**review**// as defined before. The partial to display is the one defined in step 6: //**$/pds/library/controllers/books/_field_reviews.htm**// \\
-Notice the '$' in front of the path. This tells october to find subpath and file in the plugin folder. +Notice the '$' in front of the path. This tells october to find subpath and file in the plugin folder.\\ 
-/* {{:examples:builder:hasmany-parentform-addpartial.jpg?direct&960 |}} */+\\ 
 +{{:examples:builder:hasmany-relation-partialfield-in-parent-form.jpg?direct&960|}}
 <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.
 ---- ----