Таблица содержащая данные типа справочник (список позиций товара к примеру),
имеет связь с таблицей заказов. Связана по полю артикул. Артикул при этом не является primary-key для таблицы заказов, но является ключевым в таблице товаров.
Для выборки данных по JOIN из этих таблиц, делаем так (пример):
В описании таблицы Товаров:
__PACKAGE__->set_primary_key('артикул');
__PACKAGE__->belongs_to('имя_связи_произвольное', 'Класс::Имя_таблицы_заказов','артикул (поле из таблицы заказов)');
В описании таблицы заказов:
__PACKAGE__->set_primary_key('какой-то первичный ключ');
__PACKAGE__->has_many('имя_связи2', 'Класс::Имя_таблицы_товаров', { "foreign.артикул" => "self.артикул" });
В последнем анонимном хэше прописано что связь производится не по primary key (без указания слов foreign и self - связывать будет пытаться по primary).
Теперь работаем с запросами так:
$rs = $db->{connect}->resultset('Таблица_заказов')->search(
{ 'me.любое_поле' => 'критерий_для_поиска' },
{
join => ['имя_связи2'],
'+select' => ['имя_связи2.поле_из_таблицы_товаров'],
'+as' => ['алиас_для_выборки'], }
);
# извлекаем данные
while ( my $r = $rs->next ) {
item => $r->get_column('алиас_для_выборки');# выборка из связанной таблицы
notes => $r->поле_из_таблицы_заказов;# выборка из родительской таблицы
});
}


Последние комментарии