簡體   English   中英

如何通過DBIx為多對多關系插入數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM