[英]How do I insert data via DBIx for Many to Many relationship?
我試圖了解DBiX,當我有多對多的關系時,我正在努力將數據插入到我的數據庫中。
在下面的示例中,我在對象和網絡之間存在多對多關系。
對象具有名稱和描述網絡具有IP和網絡掩碼
我有一個多對多關系的聯結表。
如何添加對象及其關聯網絡?
比如我有
object
—————
Name : TestObject1
Description: TestObject1
使用以下網絡
IP:1.1.1.1
Netmask:255.255.255.255
IP:2.2.2.2
Netmask:255.255.255.255
和
Name : TestObject2
Description: TestObject2
使用以下網絡
IP:1.1.1.1
Netmask:255.255.255.255
IP:3.3.3.3
Netmask:255.255.255.255
我知道如何插入具有1到多個關系的數據,但我無法弄清楚如何處理多對多。 理想情況下,我希望能夠構建我的數據結構,然后一次性添加它。
下面是由模式加載器創建的相關表。
謝謝。
Object Table
------------
__PACKAGE__->table("Object");
__PACKAGE__->add_columns(
"objectid",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"description",
{ data_type => "varchar", is_nullable => 1, size => 100 },
"objectname",
{ data_type => "varchar", is_nullable => 0, size => 100 },
);
__PACKAGE__->set_primary_key("objectid");
__PACKAGE__->has_many(
"object_has_networks",
"TestApp::Schema::Result::ObjectHasNetwork",
{ "foreign.object_objectid" => "self.objectid" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->many_to_many(
"network_networkids",
"object_has_networks",
"network_networkid",
);
Network Table
------------
__PACKAGE__->table("network");
__PACKAGE__->add_columns(
"networkid",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
“IP”,
{ data_type => "varchar", is_nullable => 1, size => 15 },
"netmask",
{ data_type => "varchar", is_nullable => 1, size => 15 },
);
__PACKAGE__->set_primary_key("networkid");
__PACKAGE__->has_many(
"object_has_networks",
"TestApp::Schema::Result::ObjectHasNetwork",
{ "foreign.network_networkid" => "self.networkid" },
{ cascade_copy => 0, cascade_delete => 0 },
);
__PACKAGE__->many_to_many("object_objectids", "object_has_networks", "object_objectid");
Junction Table
--------------
__PACKAGE__->table("Object_has_network");
__PACKAGE__->add_columns(
"object_objectid",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
"network_networkid",
{ data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
);
__PACKAGE__->set_primary_key("object_objectid", "network_networkid");:wq
__PACKAGE__->belongs_to(
"network_networkid",
"TestApp::Schema::Result::Network",
{ networkid => "network_networkid" },
{ is_deferrable => 1, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
__PACKAGE__->belongs_to(
"object_objectid",
"TestApp::Schema::Result::Object",
{ objectid => "object_objectid" },
{ is_deferrable => 1, on_delete => "NO ACTION", on_update => "NO ACTION" },
);
第一個DBIx是一個完整的命名空間,其中DBIx :: Class只是一個dist。 常見的縮寫是DBIC。
多對多不是關系而是輔助,因此您只需指定形成m2m關系橋的兩個關系以進行搜索和插入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.