Используя Rose::DB::Object, как я могу автоматически создать объект в отношении, если он не найден?
У меня есть 2 таблицы, которые от 1 до [0/1]. Есть ли способ автоматического создания отношения объекта / строки, используя Rose:: DB:: Object:
Например:
# detailed_summary is the 1-to-1 relationship
# if detailed_summary exist, get it
# if not, create a new one with links?
$obj->detailed_summary
Может быть триггер?
1 ответ
Триггер столбца не то, что вы хотите. Одним из способов достижения вашей цели было бы назвать ваши отношения с ведущими символами подчеркивания, а затем написать свои собственные методы без подчеркивания, чтобы сделать вещь "сделай, если ее еще нет":
sub detailed_summary
{
my($self) = shift;
my $existing_object = $self->_detailed_summary(@_);
unless($existing_object)
{
# Create a new object
my $new_object = My::Summary->new(...);
# Assign it to its parent so it will be stored in the
# database when the parent is save()d, then return it.
return $self->_detailed_summary($new_object);
}
return $existing_object;
}
Вы также можете сделать то же самое, обернув сгенерированный метод details_summary() после его создания, либо вручную (с помощью typeglobs и ссылок на подпрограммы), либо с помощью модуля CPAN, который может обернуть существующие подпрограммы.
(Приведенный выше код является довольно регулярным, и вы должны быть в состоянии автоматизировать его создание, если вы в конечном итоге будете делать это много.)