Получение связанных данных из объекта Result
У меня есть следующие отношения в моем классе результатов Entry:
package Schema::Result::Entry;
__PACKAGE__->has_many(
"entry_i18ns",
"Schema::Result::EntryI18n",
{ "foreign.entry_id" => "self.id" },
{ cascade_copy => 0, cascade_delete => 0 },
);
Поэтому я хочу получить связанные данные из недавно созданного объекта Schema::Result::Entry:
$result = $schema->resultset('Result')->create({ entry_i18ns => { title => 'foo', language_code => 'en' } });
Проблема в том, что entry_i18ns
accessor выполняет дополнительный SELECT и возвращает все связанные объекты EntryI18n, а не тот, который был создан с помощью вызова create().
Насколько я вижу, данные, которые мне нужны, хранятся с $result->{_relationship_data}{entry_i18ns}
ссылка на массив, так что я могу получить к нему доступ, что-то вроде
my $related_data = $result->{_relationship_data}{entry_i18ns}[0]{_column_data};
Но как я могу сделать это, не испортив внутреннее хранилище DBIC?
1 ответ
Нет доступа к этому в DBIC. Средства доступа для "мульти" отношений всегда делают новый выбор. Но вы можете создать собственный компонент, который добавляет этот метод доступа. Или просто добавьте метод в класс результата.