- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 DBIx::Class我有两个模式:
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;
和:
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;
我想做的是用一个人对象一次添加多个地址。我是这样做的:
my $person = $c->model('DB::Person')->new_result({});
$person->addresses([
{
id => 1,
person_id => 1,
},
{
id => 2,
person_id => 1,
},
]);
$person->insert;
我从这个 article 开始遵循这种格式,但它似乎不起作用。只会插入人员行,但不会插入与其关联的地址。我还尝试在插入之前将 addresses
设置为 MyApp::Schema::Result::Address
对象的 arrayref,但这也不起作用。有谁知道我做错了什么?我没有收到任何错误,只是没有插入地址。在文章中他们使用创建而不是插入。是因为这个吗?如果是这样,有没有办法使用 insert 来做到这一点?或 update ?
最佳答案
当您添加相关的子记录时,您不需要为子记录指定外键值。这种关系应该会自动为您解决这个问题。例如在你的例子中 person_id 是不必要的。
我怀疑这可能会导致示例中出现问题。你怎么知道 person_id 真的是 1?这是一个自动增量列,您在创建 Person 时并未明确传递值。
这会发生什么:
-- 亲自.pm --
__PACKAGE__->add_columns(
"id",
{ data_type => "integer", is_auto_increment => 1, is_nullable => 0 },
"name",
{ data_type => "varchar"},
);
-- 在 Address.pm 中 --
__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 },
"street",
{ data_type => "varchar"},
);
然后插入代码:
my $person = $c->model('DB::Person')->new_result({ name => "Bob" });
$person->addresses([
{
street => "Apple Street",
},
{
street => "Orange Avenue",
},
]);
$person->insert;
关于perl - DBIx::Class 插入有很多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24689566/
我在应用程序中使用 DBIx::Simple 和 SQL::Abstract。这是数据库连接代码: my $nms_host = 'mysql.server.com'; my $nms_base
我正在为应用程序使用 Catalyst,并准备将生产版本升级到下一个主要版本。在新版本中,对数据库进行了大量更改。 Catalyst 中的 ORM 是使用物理开发数据库中的 DBIx::Class::
除了使用 View 并手动写出SQL之外,我没有找到与DBIx::Class进行联合的方法。这对我来说似乎很奇怪。我觉得应该有某种方法来合并两个ResultSet,而无需进行很多额外的工作,因为集加法
我在 Dancer2 项目中使用 DBIx::Class 与 MySQL 数据库对话。在该项目中,我有一个 ClassInfo 结果集,我可以毫无问题地从中进行选择、搜索、删除和更新。 但是,每当我尝
我正在使用DBIx::Class并且只想更新表中的一行。目前我是这样做的: my $session = my_app->model("DB::Session")->find(1); $sessi
我最近从事一个 Perl 项目,该项目要求我使用 DBIx::Class 作为 ORM 来与数据库交互。我发现最烦人且最耗时的一件事就是尝试调试和了解正在发生的事情。 我对 Column 'XXXXX
从数据库读取的访问权限已通过返回结果集而不是表或 View 的 mssql 存储过程授予我。但我希望能够使用 ORM 读取数据。 我尝试使用 DBIx::Class::ResultSource::Vi
在下面的这个例子中: my $rs = $schema->resultset('CD')->search( { 'artist.name' => 'Bob Marley' 'liner_not
这是三个表:product , model , 和 product_model以 N:M 关系映射产品和模型。 product product_model mo
在 C#/.Net 世界中,有诸如 NHibernate 或 ActiveRecord 之类的 ORM 包含透明缓存:数据库更新被透明地复制到缓存,对象在可用时直接从缓存中检索等(通常使用 memca
我正在尝试在我的应用程序中实现结果集链接。 以下是我的结果集类中的一些方法: package Schema::ResultSet::Category; use base 'DBIx::Class::R
我正在使用 DBIx::Class我有两个模式: use utf8; package MyApp::Schema::Result::Person; use Moose; use MooseX::Non
是否可以将列添加到 DBIx::Class::Row 对象,这些列是虚拟的,因为它们不会保存到数据库中?我正在寻找 Rose::DB::Object 通过其非持久列 http://search.cpa
我在这上面花了太多时间,但仍然无法使语法正常工作。 在 DBIx::Class 中可以使用这个 select 语句吗? "SELECT A.id, A.name, count(C.a_id) AS c
节日, 我正在使用 DBIx::Class 0.07003 和 DBIx::Class::Schema::Loader 0.03009 并且我正在尝试更改 Loader 生成的类的基类 - 从: pa
我有两个 MySQL 表 humans 和 dogs: TABLE humans: id int, name varchar(32) TABLE dogs id int, human int, dea
我正在尝试使用 MySQL 跟随本教程: https://metacpan.org/pod/DBIx::Class::Migration::Tutorial::FirstMigration 我正在运行
我正在尝试使用 DBIx::Class 编写以下 SQL 查询: SELECT * FROM (SELECT username, DENSE_RANK () OVER (ORDER BY COUNT(
我有一个直接在 MySQL 中运行良好的 SQL 查询,但我正在努力将其转换为通过 DBIx::Class 使用,我在此处简化了查询 UPDATE table1, table2 SET tab
我正在尝试使用 DBIx::Class::Schema::Loader 为 Catalyst 创建模型。我希望结果类有一个基类,我可以向其添加方法。所以 MyTable.pm 继承自 Base.pm,
我是一名优秀的程序员,十分优秀!