Я использую DBIx :: Class в проекте Dancer2 для связи с базой данных MySQL. В этом проекте у меня есть набор результатов ClassInfo, из которого я могу без проблем выбирать, искать, удалять и обновлять.
Однако всякий раз, когда я пытаюсь добавить новую строку, через:
my $new_class = $SCHEMA->resultset( 'ClassInfo' )->new({});
or
my $new_class = $SCHEMA->resultset( 'ClassInfo' )->create({});
(данные опущены для краткости), я получаю следующую ошибку:
DBIx::Class::Row::has_column_loaded(): Can't call has_column data as class method at /home/jlamey/src/dancer_projects/QP/bin/../lib/QP.pm line 2109
2104 {
2105 flash error => sprintf( 'Class <strong>%s</strong> already exists.' );
2106 redirect '/admin/manage_classes/classes';
2107 }
2108
2109 my $new_class = $SCHEMA->resultset( 'ClassInfo' )->new(
2110 {
2111 title => body_parameters->get( 'title' ),
2112 description => body_parameters->get( 'description' ),
2113 class_group_id => body_parameters->get( 'class_group_id' ),
2114 class_subgroup_id => ( body_parameters->get( 'class_subgroup_id' ) ? body_parameters->get( 'class_subgroup_id' ) : undef ),
Я даже попытался отправить как «новую», так и «создать» команду с нулевыми данными, просто чтобы убедиться, что это не данные, вызывающие ошибку, и ошибка по-прежнему возникает.
Таблица, в которую он пытается записать, выглядит так:
+----------------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+---------------------+------+-----+---------+----------------+
| id | int(8) unsigned | NO | PRI | NULL | auto_increment |
| class_group_id | int(8) unsigned | NO | MUL | 1 | |
| class_subgroup_id | int(8) unsigned | YES | MUL | NULL | |
| teacher_id | int(8) unsigned | YES | MUL | NULL | |
| secondary_teacher_id | int(8) unsigned | YES | MUL | NULL | |
| tertiary_teacher_id | int(8) unsigned | YES | MUL | NULL | |
| title | varchar(255) | NO | MUL | | |
| description | text | NO | | NULL | |
| num_sessions | varchar(255) | YES | | NULL | |
| fee | varchar(100) | YES | | NULL | |
| skill_level | varchar(255) | YES | | NULL | |
| is_also_embroidery | tinyint(1) unsigned | YES | MUL | 0 | |
| is_also_club | tinyint(1) unsigned | YES | MUL | 0 | |
| show_club | tinyint(1) unsigned | YES | | 0 | |
| image_filename | varchar(255) | YES | | NULL | |
| supply_list_filename | varchar(255) | YES | | NULL | |
| no_supply_list | tinyint(1) unsigned | YES | | 0 | |
| always_show | tinyint(1) unsigned | YES | | 0 | |
| anchor | varchar(5) | YES | | NULL | |
| new | tinyint(1) unsigned | YES | | 0 | |
+----------------------+---------------------+------+-----+---------+----------------+
И набор результатов выглядит так:
package QP::Schema::Result::ClassInfo;
use base qw/DBIx::Class::Core/;
__PACKAGE__->table( 'classes' );
__PACKAGE__->add_columns(
id =>
{
data_type => 'integer',
size => 8,
is_nullable => 0,
is_auto_increment => 1,
},
.
.
.
new =>
{
data_type => 'boolean',
is_nullable => 0,
default_value => 0,
},
);
__PACKAGE__->set_primary_key( 'id' );
__PACKAGE__->belongs_to( teacher => 'QP::Schema::Result::Teacher', 'teacher_id' );
__PACKAGE__->belongs_to( teacher2 => 'QP::Schema::Result::Teacher', 'secondary_teacher_id' );
__PACKAGE__->belongs_to( teacher3 => 'QP::Schema::Result::Teacher', 'tertiary_teacher_id' );
__PACKAGE__->belongs_to( class_group => 'QP::Schema::Result::ClassGroup', 'class_group_id' );
__PACKAGE__->belongs_to( subgroup => 'QP::Schema::Result::ClassSubgroup', 'class_subgroup_id' );
__PACKAGE__->has_many( dates => 'QP::Schema::Result::ClassDate', 'class_id' );
1;
Я в растерянности; ни у одного другого набора результатов в этом проекте нет этой проблемы, и все они построены одинаково.
Заранее благодарю за любую помощь. - Джейсон
has_many
отношение, и у вас будет дополнительный ResultClass. Но в целом это намного более эффективный дизайн. - person simbabque   schedule 05.09.2017