J'utilise DBIx::Class et j'ai deux schemas:DBIx :: insert de classe a beaucoup
use utf8;
package MyApp::Schema::Result::Person;
use Moose;
use MooseX::NonMoose;
use MooseX::MarkAsMethods autoclean => 1;
extends 'DBIx::Class::Core';
__PACKAGE__->table("person");
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
);
__PACKAGE__->has_many(
"addresses",
"MyApp::Schema::Result::Address",
{ "foreign.person_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
1;
Et:
use utf8;
package MyApp::Schema::Result::Address;
use Moose;
use MooseX::NonMoose;
use MooseX::MarkAsMethods autoclean => 1;
extends 'DBIx::Class::Core';
__PACKAGE__->table("address");
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"person_id",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 1 },
);
__PACKAGE__->belongs_to(
"person",
"MyApp::Schema::Result::Person",
{ id => "person_id" },
{
is_deferrable => 0,
join_type => "LEFT",
on_delete => "NO ACTION",
on_update => "NO ACTION",
},
);
1;
Ce que je suis en train de faire est d'ajouter plusieurs adresses à la fois avec un objet personne. Je fais cela comme ceci:
my $person = $c->model('DB::Person')->new_result({});
$person->addresses([
{
id => 1,
person_id => 1,
},
{
id => 2,
person_id => 1,
},
]);
$person->insert;
J'ai suivi ce format de cette article, mais il ne semble pas fonctionner. Seule la ligne de personne est insérée, mais pas les adresses associées. J'ai également essayé de placer addresses
à un arrayref d'objets MyApp::Schema::Result::Address
avant l'insertion, mais cela ne fonctionne pas non plus. Est-ce que quelqu'un sait ce que je fais mal? Je ne reçois aucune erreur, il n'insère pas les adresses. Dans l'article, ils utilisent create au lieu d'insert. Est-ce à cause de ça? Si oui, existe-t-il un moyen de le faire en utilisant insert ou update?
La raison pour laquelle je veux insérer après avoir attribué les adresses est parce que je suis d'abord en utilisant HTML :: FormHandler pour le valider, et HTML :: FormHandler a besoin d'un élément à valider le formulaire, donc je dois avoir la ligne avant de faire cet appel. De plus, je n'attribue pas les identifiants d'incrémentation automatique - c'était juste par exemple. – srchulo