Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 973183
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 16, 20262026-05-16T03:14:28+00:00 2026-05-16T03:14:28+00:00

With the following (simplified) MySQL table definitions: create table items ( item_id int unsigned

  • 0

With the following (simplified) MySQL table definitions:

create table items (
    item_id         int unsigned auto_increment primary key,
    purchase_date   date
    ) engine = innodb;

create table computers (
    item_id         int unsigned primary key,
    processor_type  varchar(50),
    foreign key item_fk (item_id) references items (item_id) 
        on update restrict on delete cascade
    ) engine = innodb;

create table printers (
    item_id         int unsigned primary key,
    is_duplex       boolean,
    foreign key item_fk (item_id) references items (item_id) 
        on update restrict on delete cascade
    ) engine = innodb;

Being new to DBIx::Class, I would like to model an inheritance relationship between database entities (computers and printers both being items), but with the provided belongs_to relationship type, this seems to be awkward, because the association with the base class is not hidden, so one must still manually create entities for both classes, and access to base class attributes in the derived classes is different from accessing their own attributes.

Is there an elegant solution which would allow me to say:

$printer = $printer_rs->create({purchase_date => $date, is_duplex => 0});

or (on a fetched printer row):

$date = $printer->purchase_date;
$duplex = $printer->is_duplex;

?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-16T03:14:29+00:00Added an answer on May 16, 2026 at 3:14 am

    You can use the proxy attribute on a relationship to enable the accessors — it’s documented in add_relationship of DBIx::Class::Relationship::Base and you can use it with belongs_to like:

    __PACKAGE__->belongs_to(
      'item' => 'MyApp::Schema::Item',
      'item_id',
      { proxy => [ qw/purchase_date/ ] }
    );
    

    which will make all of your Printer objects have purchase_date accessors that refer to the associated Item object.

    As for create, you can’t do it without overriding new_result, which is actually pretty easy. You just have to take advantage of the create-from-related behavior to turn

    ->create({
      is_duplex => 1,
      purchase_date => $dt,
    })
    

    into

    ->create({
      is_duplex => 1,
      item => {
        purchase_date => $dt,
      },
    })
    

    Or you could just foist the knowledge of what columns are in item off on your users and have them provide that hashref directly 😉

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 485k
  • Answers 485k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer ping. Dim response As Boolean = False response = My.Computer.Network.ping(google.com)… May 16, 2026 at 7:43 am
  • Editorial Team
    Editorial Team added an answer "Cannot find source for binding" I suspect that Framework:DialogMetadata's datacontext… May 16, 2026 at 7:43 am
  • Editorial Team
    Editorial Team added an answer The key control to think about is an ItemsControl (ComboBox… May 16, 2026 at 7:43 am

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.