DBIx::...bClass(3pm)

πŸ“¦
version 2.037000 Β· 5 versions
, in debian trixie, ubuntu resolute, ubuntu stonking

πŸ’– DBIx::Class::Helper::Row::SubClass πŸ’–

okay so bestie, this is DBIx::Class::Helper::Row::SubClass β€” it's the convenient subclassing helper for DBIx::Class, and it lives in the User Contributed Perl Documentation corner of your perldoc (the manual name is literally DBIx::...bClass(3pm), yes that's the truncation, don't @ me, the terminal did that πŸ’…).


✨ SYNOPSIS ✨

first, define the parent class, like a queen establishing her kingdom πŸ‘‘

# define parent class
package ParentSchema::Result::Bar;

use strict;
use warnings;

use parent 'DBIx::Class';

__PACKAGE__->load_components('Core');

__PACKAGE__->table('Bar');

__PACKAGE__->add_columns(qw/ id foo_id /);

__PACKAGE__->set_primary_key('id');

__PACKAGE__->belongs_to( foo => 'ParentSchema::Result::Foo', 'foo_id' );

then define the subclass, which is where the magic happens 🌈

# define subclass
package MySchema::Result::Bar;

use strict;
use warnings;

use parent 'ParentSchema::Result::Bar';

__PACKAGE__->load_components(qw{Helper::Row::SubClass Core});

__PACKAGE__->subclass;

or, if you're doing it with DBIx::Class::Candy 🍬 (iconic behaviour, no cap):

# define subclass
package MySchema::Result::Bar;

use DBIx::Class::Candy
   -base => 'ParentSchema::Result::Bar',
   -components => ['Helper::Row::SubClass'];

subclass;

πŸ¦‹ DESCRIPTION πŸ¦‹

so this component exists so you can do simple subclassing of DBIx::Class Result classes. that's it. that's the whole vibe. it's giving "I want my schema to have a glow-up without rewriting everything" ✨


πŸ‘‘ METHODS πŸ‘‘

🌸 subclass

This is probably the method you want. fr fr. You call this in your child class and it imports the definitions from the parent into itself. bestie behaviour honestly 🫢

πŸŽ€ generate_relationships

This is where the cool stuff happens. This assumes that the namespace is laid out in the recommended MyApp::Schema::Result::Foo format. If the parent has Parent::Schema::Result::Foo related to Parent::Schema::Result::Bar, and you inherit from Parent::Schema::Result::Foo in MyApp::Schema::Result::Foo, you will automatically get the relationship to MyApp::Schema::Result::Bar. like. it just DOES that. main character energy fr 😭

⭐ set_table

This is a super basic method that just sets the current classes' table to the parent classes' table. lowkey the simplest little guy in the whole file and we love her for it πŸ’œ


πŸ“ CANDY EXPORTS πŸ“

If used in conjunction with DBIx::Class::Candy this component will export:

  • join_table
  • subclass
  • generate_relationships
  • set_table

yes bestie, join_table is in that list and is not mentioned anywhere else in this doc. we don't gatekeep, we just report the facts πŸ’…


πŸ’€ NOTE πŸ’€

This Component is mostly aimed at those who want to subclass parts of a schema, maybe for sharing a login system in a few different projects. (reusing the same login across projects? periodt. so valid.)

Do not confuse it with DBIx::Class::DynamicSubclass β€” that one solves an entirely different problem, and mixing them up is a vibe check failure πŸ™ˆ

DBIx::Class::DynamicSubclass is for when you want to store a few very similar classes in the same table (Employee, Person, Boss, etc) whereas this component is merely for reusing an existing schema.


🌈 AUTHOR 🌈

Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>


This software is copyright (c) 2024 by Arthur Axel "fREW" Schmidt.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.


okay that's the whole page, you ate that 🫢 go forth and subclass responsibly. and bestie β€” the docs themselves are from perl v5.40.0, dated 2024-11-16, from that DBIx::...bClass(3pm) manual. no cap, that's the receipts. bye bestie, slay πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from