[Madrid-pm] Código SQL para DBIx::Class

Diego Kuperman diego en kuperman.com.ar
Dom Abr 18 06:13:01 PDT 2010


Hola!,

On 4/17/10 6:40 PM, JJ Merelo wrote:
> Hola,
> Quiero crear tablas innodb en DBIx::Class para poder usar claves
> externas (aunque no tengo muy claro que hagan falta). ¿Tenéis idea de
> como llamar a table para pasarle código de esto?
> 
Bueno, si usas el metodo deploy() del schema para crear el sql y los
resultsources de este schema definen relaciones, el sqlt automaticamente
te creara las tablas como innodb.

Si no tienes pk's y fk's definidas en los metadatos, puedes añadirlo ya
sea tabla por tabla o para todas las tablas del schema: (aunque si no
tienes pk y fk, pues, no vale pa mucho)

# Si fuera solo en una tabla:
-----------------------------

package MySchema::Result::Yada;

# ... definición ...

sub sqlt_deploy_hook {
    my ($self, $sqlt_table) = @_;

    $sqlt_table->extra(
        mysql_table_type    => 'InnoDB',
        mysql_charset       => 'utf8',
    );
}

# Si fuera para todas las tablas del schema:
--------------------------------------------

package MySchema;
use base 'DBIx::Class::Schema';

__PACKAGE__->load_namespaces;

sub sqlt_deploy_hook {
    my ($self, $sqlt_schema) = @_;

    for my $sqlt_table ( $sqlt_schema->get_tables ) {
        $sqlt_table->extra(
            mysql_charset    => 'utf8',
            mysql_table_type => 'InnoDB'
	);
    }
}

1;

... Pues, eso, pero como te decia, no te deberia hacer falta forzar
innodb, aunque si te recomiendo añadir el mysql_charset ;)

Un abrazo!,
Diego


Más información sobre la lista de distribución Madrid-pm