The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

MKDoc::SQL::Category - Hierarchical ordrered category table object.

SUMMARY

MKDoc::SQL::Category is a subclass of MKDoc::SQL::Table, with the following differences:

  • The table MUST have a primary key of one field exactly

  • The table MUST have a field which represents the category path, i.e. /foo/bar/baz/

  • The table MUST have a nullable field which represents the category name, i.e. in /foo/bar/baz/ the category name is 'baz'.

  • The table MUST have a nullable field which represents the parent of the current category.

  • The table MUST have a non-null integer position field which stores how categories are ordered within a specific sub-category.

Moving a category into another category is fairly simple: Change the record's Parent_ID to the new parent and call $self->modify(); All the pathes of the current object and its children will be modified for you.

Apart from when you insert the root category '/'. you should _NEVER_ have to manually modify the full path field: this class manages it for you.

$class->new (%arguments);

  MKDoc::SQL::Category->new (
      name     => $table_name,
      pk       => [ $name1 ],
      cols     => [ { name => $name1, type => $type1 },
                    { name => $name2, type => $type2 } ],
      unique   => { $name1 => [ $col1, $col2 ] }
      index    => { $name2 => [ $col2 ] }
      fk       => { foreign_table => { source_col => target_col } }
      ai       => TRUE / FALSE

      # extra mandatory options
      category_id       => "ID",
      category_path     => "Path",
      category_name     => "Name",
      category_parent   => "Parent_ID",
      category_position => "Position"
  );