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 <
[email protected]>
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)