����DBIC������\���\������¼\·\���\��я��������«��¡���²���»��������Ï����ď����я���������������㏢����������»��С���ӏ��̏������������µ��������¡ߏ�����»�ߏ����������������������������������������Ώ��������·�����ď�¡������ޏ������������������·��������¡�entry\������¼\���\���������comment\������¼\���\���������¹�����𡯏����������Ώ��������·�����������Ï�¡�
Entry has_many Comment ( Comment belongs_to Entry ) �����������·������������¹��������¡��³������¾���¹���������\���\������¼\·\���\��я������돪�²¼���������������Ï��������������������������¹��¡�
���µ��������¡�������������������������������돪㏢�«���������«������������������������¹��¡����������돢¡�̏��«���������������¹���������¹�����������ď�������¡�has_many ������ belongs_to \���\½\���\��������ҏ����������я�����������������\���\���\¹����¾����������������������� __PACKAGE__ �����������³������������ ����������������½Ð���·�����Ï��� ��¡�has_many ������ belongs_to �����¡돫⏢ď�ԏ���������������½��Џ��«������������������������\���\���\¹������ ����������������½Ð���µ�����������Ï��� ���������������Ð���»���������������������µ��������¡�
�����������돢¡�돫������ӡ���Ï����䏪���쏢����\������¼\������쏢�쏢�½���������������������������쏢��
�돪�¾������쏢���ď����������ď��³���������������ޏ��쏢��\���\���\���\������������������������������� ���� FOREIGN KEY ������������������\������¼\���\�������������������\«\���\����������������« ��¡ߏ��������������������������������·�����������Ï��«���폪��������������²��ҏ�������������¡�³�돪���ԏ�����\������¼\��\���������\������¼\��ď�����»�������������������\«\���\�������Comment\������¼\���\���������entry_id�����Ώ����ď������������������� FOREIGN KEY �����������я��������¹����¹������������������������¹���Ï��Ï�������������¡��ď���̏�¡�(���\��Ï��\����)
has_many ������¾���¹���������¹�����𡯏����������Ώ�����
�����������돢¡�has_many ������\���\������¼\·\���\��я�����¾���¹�����¡�Catalyst������»���������¾���¹��������ҏ������������·������¹�����𡯏����������Ώ��������¹��¡�
# Controller
# Schema ( Schema/Entry.pm )
\���\��ď��¼\���1������\��쏢�¼\½\���\���\���\¹�������������������¹��¡�\���\��ď��¼\���2���������������Ï����� LEFT JOIN ������ INNER JOIN ������������¹¹���¹���������³������������²������½���������¹��¡�\���\���\���\���\���������������������������½Ð���·�����Ï����� PRIMARY KEY ���� JOIN ������»������������������������¹���̏�¡�\���\��ď��¼\���3���������������Ï��������¾������\«\���\��������ҏ����̏����Џ��¹���������³������������������������²������½���������¹��¡�
has_one, might_have ������¾���¹���������¹�����𡯏����������Ώ�����
\���\���\���\���\µ\�������������¾�����¢̏�¡�
has_many ��������������������ޏ��������������¹��¡�has_many ���� 1���Ð������ �����������·����������������������Ð���·��������¡��³������������������ 1���Ð1 �����������·������������¹��¡�has_one ������ might_have �����¡돫�������������\���\���\���\���\��������� JOIN ���� INNER JOIN ���« LEFT JOIN ���«��������������������������������¡�
belongs_to ������¾���¹���������¹�����𡯏����������Ώ�����
¼���������¡�belongs_to ������¾���¹���������¹�����𡯏����������Ώ��������¹��¡��³������������ Catalyst ������»���������������¾���¹��������������������¹��¡�
# Controller
# Schema ( Schema/Comment.pm )
\���\��ď��¼\���1������\��쏢�¼\½\���\���\���\¹�������������������¹��¡�\���\��ď��¼\���2���������������Ï����� INNER JOIN ������ RIGHT JOIN ������������¹¹���¹���������³������������²������½���������¹��¡�\���\���\���\���\���������������������������½Ð���·�����Ï����� PRIMARY KEY ���� JOIN ������»������������������������¹���̏�¡�\���\��ď��¼\���3���������������Ï��������¾������\«\���\��������ҏ����̏����Џ��¹���������³������������������������²������½���������¹��¡�
many_to_many ������¾���¹���������¹�����𡯏����������Ώ�����
���¹���������������»�����я�¡�¡�»��������������ď��³���������µ���������������¹��¡�¡��������·���������������«��µ��𡯏��������������������µ��������������
����»²¹�������
������������������¾��䏢�·���������������������ď������������������³�����������������ҏ��������¼���¾��¡���������DBIx::Class::Relationship - Inter-table relationships
mysql> desc entry; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | content | text | YES | | NULL | | +---------+--------------+------+-----+---------+----------------+ 3 rows in set (0.02 sec) mysql> desc comment; +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | entry_id | int(11) | NO | | NULL | | | name | varchar(255) | NO | | NULL | | | content | text | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
Entry has_many Comment ( Comment belongs_to Entry ) �����������·������������¹��������¡��³������¾���¹���������\���\������¼\·\���\��я������돪�²¼���������������Ï��������������������������¹��¡�
# MyApp/Schema/Entry.pm
__PACKAGE__->has_many(
comments => 'MyApp::Schema::Comment',
'entry_id'
);
# MyApp/Schema/Comment.pm
__PACKAGE__->belongs_to( entry_id => 'MyApp::Schema::Entry' );
���µ��������¡�������������������������������돪㏢�«���������«������������������������¹��¡����������돢¡�̏��«���������������¹���������¹�����������ď�������¡�has_many ������ belongs_to \���\½\���\��������ҏ����������я�����������������\���\���\¹����¾����������������������� __PACKAGE__ �����������³������������ ����������������½Ð���·�����Ï��� ��¡�has_many ������ belongs_to �����¡돫⏢ď�ԏ���������������½��Џ��«������������������������\���\���\¹������ ����������������½Ð���µ�����������Ï��� ���������������Ð���»���������������������µ��������¡�
�����������돢¡�돫������ӡ���Ï����䏪���쏢����\������¼\������쏢�쏢�½���������������������������쏢��
__PACKAGE__->method(
'accessor_name' => 'MyApp::Schema::Hoge',
'FOREIGN KEY' or \%cond,
\%attrs,
);
1. �������돫��돫⏢ď�ԏ����������� accessor_name ������»������������¹�������������³�������¾����돢���� prefetch ���·�����ď�������¡��ӏ����������������������� DBIx::Class::ResultSet\���\���\���\��\���\������������³�������¾����돢����\���\½\���\������̏�������𡯏����ď��������¹������
2. �����������ѡ돫⏢ď�ԏ����������� ������������½Ð���µ�����������Ï�����»������������¹����������
3. ������»��돫⏢ď�ԏ����������� JOIN �����������̏����Џ��µ������������ FOREIGN KEY ������»������������¹����������\���\���\·\���\���\���\���\���\���\¹������ JOIN ������¾���·���������»������������¹���������³������������²������½
����������»��돫⏢ď�ԏ��̏��µ������ or undef ������¾���¹�����������������¡�accessor_name ���� FOREIGN KEY ���������«���������µ������������ JOIN ����
4. ������»����돫⏢ď�ԏ��������������½�������¾������¾���·������� join_type ����������������������»������������¹����������������������¾���·������̏��µ���ޏ��������о�����¢̏�¡��������·������������ undef �����ҏ��������¹
�돪�¾������쏢���ď����������ď��³���������������ޏ��쏢��\���\���\���\������������������������������� ���� FOREIGN KEY ������������������\������¼\���\�������������������\«\���\����������������« ��¡ߏ��������������������������������·�����������Ï��«���폪��������������²��ҏ�������������¡�³�돪���ԏ�����\������¼\��\���������\������¼\��ď�����»�������������������\«\���\�������Comment\������¼\���\���������entry_id�����Ώ����ď������������������� FOREIGN KEY �����������я��������¹����¹������������������������¹���Ï��Ï�������������¡��ď���̏�¡�(���\��Ï��\����)
has_many ������¾���¹���������¹�����𡯏����������Ώ�����
�����������돢¡�has_many ������\���\������¼\·\���\��я�����¾���¹�����¡�Catalyst������»���������¾���¹��������ҏ������������·������¹�����𡯏����������Ώ��������¹��¡�
# Controller
$c->model('DBIC::Entry')->search(
{},
{
# ���³���³������»������������¹����������������\������¼\���\������¾������������������������������\���\������¼\·\���\��я������¾�����(has_many���������«belongs_to���������«�����������돫��돫⏢ď��)�����������������������돪؏��쏢��
prefetch => [ qw/comments/ ],
},
);
# Schema ( Schema/Entry.pm )
# ---------------------------
# \���\��ď��¼\���1
# ---------------------------
# ������������½Ð���·�����Ï����� PRIMARY KEY ��������¡���������½Ð���µ�����������Ï����� FOREIGN_KEY ������������ LEFT JOIN
# LEFT JOIN entry.id = comment.entry_id
__PACKAGE__->has_many(
comemnts => 'MyApp::Schema::Comment',
'entry_id',
);
# ---------------------------
# \���\��ď��¼\���2
# ---------------------------
# ������������½Ð���·�����Ï����� PRIMARY KEY ��������¡���������½Ð���µ�����������Ï����� FOREIGN KEY ������������ INNER JOIN
# INNER JOIN entry.id = comment.entry_id
__PACKAGE__->has_many(
comments => 'MyApp::Schema::Comment',
'entry_id',
{ join_type => 'inner' }, # join_type ����������̏����돪����»����돫⏢ď�ԏ�����
);
# ---------------------------
# \���\��ď��¼\���3
# ---------------------------
# ������������½Ð���·�����Ï���������돪؏�����\«\���\�����������¡���������½Ð���µ�����������Ï����� FOREIGN KEY ������������ LEFT JOIN
# LEFT JOIN entry.name = comment.entry_id
__PACKAGE__->has_many(
comments => 'MyApp::Schema::Comment',
{ 'foreign.entry_id' => 'self.name' },
);
\���\��ď��¼\���1������\��쏢�¼\½\���\���\���\¹�������������������¹��¡�\���\��ď��¼\���2���������������Ï����� LEFT JOIN ������ INNER JOIN ������������¹¹���¹���������³������������²������½���������¹��¡�\���\���\���\���\���������������������������½Ð���·�����Ï����� PRIMARY KEY ���� JOIN ������»������������������������¹���̏�¡�\���\��ď��¼\���3���������������Ï��������¾������\«\���\��������ҏ����̏����Џ��¹���������³������������������������²������½���������¹��¡�
has_one, might_have ������¾���¹���������¹�����𡯏����������Ώ�����
has_many ��������������������ޏ��������������¹��¡�has_many ���� 1���Ð������ �����������·����������������������Ð���·��������¡��³������������������ 1���Ð1 �����������·������������¹��¡�has_one ������ might_have �����¡돫�������������\���\���\���\���\��������� JOIN ���� INNER JOIN ���« LEFT JOIN ���«��������������������������������¡�
belongs_to ������¾���¹���������¹�����𡯏����������Ώ�����
¼���������¡�belongs_to ������¾���¹���������¹�����𡯏����������Ώ��������¹��¡��³������������ Catalyst ������»���������������¾���¹��������������������¹��¡�
# Controller
$c->model('DBIC::Comment')->search(
{},
{
# ���³���³������»������������¹����������������\������¼\���\������¾������������������������������\���\������¼\·\���\��я������¾�����(has_many���������«belongs_to���������«�����������돫��돫⏢ď��)�����������������������돪؏��쏢��
prefetch => [ qw/entry_id/ ],
},
);
# Schema ( Schema/Comment.pm )
# ---------------------------
# \���\��ď��¼\���1
# ---------------------------
# ������»��돫⏢ď�ԏ��̏��µ������������������¡�accessor_name(entry_id)���� JOIN ������¾���·������������·�����������̏����Џ��µ���������������¹
# ������������½Ð���·�����Ï����� FOREIGN KEY ��������¡���������½Ð���µ�����������Ï����� PRIMARY KEY ������������ INNER JOIN
# JOIN ON comment.entry_id = entry.id
__PACKAGE__->belongs_to( entry_id => 'MyApp::Schema::Entry' );
# ---------------------------
# \���\��ď��¼\���2
# ---------------------------
# ������������½Ð���·�����Ï����� FOREIGN KEY ��������¡���������½Ð���µ�����������Ï����� PRIMARY KEY ������������ RIGHT JOIN
# RIGHT JOIN ON comment.entry_id = entry.id
__PACKAGE__->belongs_to(
entry_id => 'MyApp::Schema::Entry',
undef,
{ join_type => 'right' } ); # join_type ����������̏����돪����»����돫⏢ď��
# ---------------------------
# \���\��ď��¼\���3
# ---------------------------
# ������������½Ð���·�����Ï����� FOREIGN KEY ��������¡���������½Ð���µ�����������Ï����� name ������������ LEFT JOIN
# JOIN ON comment.entry_id = entry.name
__PACKAGE__->has_many(
comments => 'MyApp::Schema::Entry',
{ 'foreign.name' => 'self.entry_id' },
\���\��ď��¼\���1������\��쏢�¼\½\���\���\���\¹�������������������¹��¡�\���\��ď��¼\���2���������������Ï����� INNER JOIN ������ RIGHT JOIN ������������¹¹���¹���������³������������²������½���������¹��¡�\���\���\���\���\���������������������������½Ð���·�����Ï����� PRIMARY KEY ���� JOIN ������»������������������������¹���̏�¡�\���\��ď��¼\���3���������������Ï��������¾������\«\���\��������ҏ����̏����Џ��¹���������³������������������������²������½���������¹��¡�
many_to_many ������¾���¹���������¹�����𡯏����������Ώ�����
���¹���������������»�����я�¡�¡�»��������������ď��³���������µ���������������¹��¡�¡��������·���������������«��µ��𡯏��������������������µ��������������
����»²¹�������
������������������¾��䏢�·���������������������ď������������������³�����������������ҏ��������¼���¾��¡���������DBIx::Class::Relationship - Inter-table relationships
