Версионирование и ActiveRecord

Пакеты Limb3 с точки зрения использования

Модератор: phpBB2 - administrators

Версионирование и ActiveRecord

Сообщение agreen » Чт фев 04, 2010 4:00 pm

Стоит такая задача:
Есть класс "Client". У клиента есть "ContactData" в виде отношения has_one. То есть $client->contact_data->phone должен выдать телефон клиента. Есть условие, что при изменении контактных данных старые должны сохраняться. Отношение has_many не подходит. Хочется сразу иметь доступ к содержимому объекта $client->contact_data при условии что запись в таблице contact_data имеет самый большой ctime.

Подскажите, как лучше это реализовать.
agreen
LIMB Newbie
 
Сообщения: 30
Зарегистрирован: Вт июл 14, 2009 5:17 pm

Re: Версионирование и ActiveRecord

Сообщение wIliaM » Чт фев 04, 2010 4:29 pm

отношение has_many еще как подходит. а на последнюю версию контактных данных всегда можно сделать линк и пробросить интерфейс для быстрого доступа.
это можно сделать отдельным методом (ниже набросок не для копипаста, а для иллюстрации идеи)
Код: Выделить всё
Client :: getContact()
{
  if($this->contact)
    return $contact;
  $this->contact  =  ContactData :: find(params(array(client_id => $this->id), order_by_id => desc, limit => 1));
  return $this->$contact;
}


можно также с value_object заморочиться при желании.
можно версионность именно для контактов хранить.
т.е. сделать one_to_many для contact_data и contact_data_history, и средствами contact_data добавлять в коллекцию contact_data_history значения при редактировании.

кроме того, никто не мешает конкретно для отображения специальную выборку данных делать, что может быть быстрее на этапе исполнения.
вобщем, вариантов масса.
Аватара пользователя
wIliaM
LIMB Developer
 
Сообщения: 718
Зарегистрирован: Пт июн 04, 2004 11:23 pm
Откуда: Russia, Penza


Вернуться в Limb3 использование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron