Используя Rose :: DB :: Object, как я могу автоматически создать объект в отношении, если он не найден? - PullRequest
1 голос
/ 13 февраля 2010

У меня есть 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 Ответ

1 голос
/ 13 февраля 2010

A триггер столбца не то, что вы хотите. Одним из способов достижения вашей цели было бы назвать ваши отношения с ведущими символами подчеркивания, а затем написать свои собственные методы без подчеркивания, чтобы сделать вещь «сделай один, если ее еще не существует»:

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, который может обернуть существующие подпрограммы.

(Приведенный выше код является довольно регулярным, и вы сможете автоматизировать его создание, если вы в конечном итоге будете это делать.)

...