NAME

    MySQL::Workbench::DBIC - create DBIC scheme for MySQL workbench .mwb
    files

VERSION

    version 1.21

SYNOPSIS

        use MySQL::Workbench::DBIC;
    
        my $foo = MySQL::Workbench::DBIC->new(
            file           => '/path/to/file.mwb',
            output_path    => $some_path,
            namespace      => 'MyApp::DB',
            version_add    => 0.01,
            column_details => 1, # default 1
            use_fake_dbic  => 1, # default 0
        );
    
        $foo->create_schema;

METHODS

 new

    creates a new object of MySQL::Workbench::DBIC. You can pass some
    parameters to new:

      my $foo = MySQL::Workbench::DBIC->new(
        output_path       => '/path/to/dir',
        input_file        => '/path/to/dbdesigner.file',
        namespace         => 'MyApp::Database',
        result_namespace  => 'Core',
        version_add       => 0.001,
        schema_name       => 'MySchema',
        column_details    => 1,
        use_fake_dbic     => 1, # default 0.
        belongs_to_prefix => 'fk_',
        has_many_prefix   => 'has_',
        uppercase         => 1,
      );

    use_fake_dbic is helpful when DBIx::Class is not installed on the
    machine where you use this module.

 create_schema

    creates all the files that are needed to work with DBIx::Class schema:

    The main module that loads all classes and one class per table. If you
    haven't specified an input file, the module will croak.

ATTRIBUTES

 output_path

    sets / gets the output path for the scheme

      print $foo->output_path;

 input_file

    sets / gets the name of the Workbench file

      print $foo->input_file;

 column_details

    If enabled, the column definitions are more detailed. Default:
    disabled.

    Standard (excerpt from Result classes):

      __PACKAGE__->add_columns( qw/
        cert_id
        register_nr
        state
      );

    With enabled column details:

      __PACKAGE__->add_columns(
        cert_id => {
          data_type         => 'integer',
          is_nullable       => 0,
          is_auto_increment => 1,
        },
        register_nr => {
          data_type   => 'integer',
          is_nullable => 0,
        },
        state => {
          data_type     => 'varchar',
          size          => 1,
          is_nullable   => 0,
          default_value => 'done',
        },
      );

    This is useful when you use DBIx::Class::DeploymentHandler to deploy
    the columns correctly.

 version_add

    The files should be versioned (e.g. to deploy the DB via
    DBIx::Class::DeploymentHandler). On the first run the version is set to
    "0.01". When the schema file already exists, the version is increased
    by the value of version_add (default: 0.01)

 schema_name

    sets a new name for the schema. By default on of these names is used:

      DBIC_Scheme Database DBIC MyScheme MyDatabase DBIxClass_Scheme

 namespace

    sets / gets the name of the namespace. If you set the namespace to
    'Test' and you have a table named 'MyTable', the main module is named
    'Test::DBIC_Scheme' and the class for 'MyTable' is named
    'Test::DBIC_Scheme::Result::MyTable'

 result_namespace

    sets / gets the name of an optional result namespace. If you set the
    result_namespace to 'Core' and you have a table named 'MyTable', the
    class for 'MyTable' is named 'Test::DBIC_Scheme::Core::Result::MyTable'

 resultset_namespace

    sets / gets the name of an optional resultset namespace. If you set the
    resultset_namespace to 'Core' and you have a table named 'MyTable', the
    resultset class for 'MyTable' is named
    'Test::DBIC_Scheme::Core::ResultSet::MyTable'

 load_result_namespace

    Additional namespaces to be loaded from the main schema class:

      my $foo = MySQL::Workbench::DBIC->new(
        output_path       => '/path/to/dir',
        input_file        => '/path/to/dbdesigner.file',
        result_namespace  => 'Core',
        load_result_namespace  => 'Virtual', # can be an arrayref, too
      );

    The schema class loads all namespaces:

      __PACKAGE__->load_namespaces(
        result_namespace => ['Core', 'Virtual'],
      );

 load_resultset_namespace

    Additional namespaces to be loaded from the main schema class:

      my $foo = MySQL::Workbench::DBIC->new(
        output_path       => '/path/to/dir',
        input_file        => '/path/to/dbdesigner.file',
        result_namespace  => 'Core',
        load_resultset_namespace => [ 'Test', 'Virtual' ], # can be a string, too
      );

    The schema class loads all namespaces:

      __PACKAGE__->load_namespaces(
        resultset_namespace => ['Test', 'Virtual'],
        result_namespace    => 'Core';
      );

 prefix

    In relationships the accessor for the objects of the "other" table
    shouldn't have the name of the column. Otherwise it is very clumsy to
    get the orginial value of this table.

      'belongs_to' => 'fk_'
      'has_many' => 'has_'

    creates (col1 is the column name of the foreign key)

      __PACKAGE__->belongs_to( 'fk_col1' => 'OtherTable', {'foreign.col1' => 'self.col1' } );

 uppercase

    When uppercase is set to true the package names are CamelCase. Given
    the table names user, user_groups and groups, the package names would
    be *::User, *::UserGroups and *::Groups.

 skip_indexes

    When skip_indexes is true, the sub sqlt_deploy_hook that adds the
    indexes to the table is not created

 utf8

    If you use non-ASCII characters in table or column comments, you should
    set the utf8 attribute to a true value. Then every generated class has
    a use utf8; in it.

 belongs_to_prefix

 has_many_prefix

 has_one_prefix

 many_to_many_prefix

 version

 use_fake_dbic

 classes

 file

 schema_base_class

 remove_table_prefix

    If your tables have a common prefix and you do not want to have that
    prefix in the class names, you can use remove_table_prefix:

      my $foo = MySQL::Workbench::DBIC->new(
        file                => $file,
        schema_name         => 'Schema',
        version             => '0.01',
        remove_table_prefix => 'ot_',
      );

    This removes any ot_ from the start at the class name.

 inherit_from_core

    By default, the classes inherit from DBIx::Class and they load the
    components PK::Auto and Core. If you set inherit_from_core, the classes
    inherit from DBIx::Class::Core. and no extra components are loaded.

 parser

    The MySQL::Workbench::Parser object.

AUTHOR

    Renee Baecker <reneeb@cpan.org>

COPYRIGHT AND LICENSE

    This software is Copyright (c) 2018 by Renee Baecker.

    This is free software, licensed under:

      The Artistic License 2.0 (GPL Compatible)