Многоуровневое?структура сложных моделей / объектов Zend Framework - PullRequest
2 голосов
/ 11 августа 2010

Как лучше всего хранить сложные модели в ZF? В приведенном ниже примере должен ли каждый атрибут быть отдельной моделью целиком или же элемент должен быть многомерным массивом (как показано ниже)?

object(Application_Model_Item)#79 (4) {
  ["_id":protected] => int(45)
  ["_name":protected] => string(5) "Bolts"
  ["_description":protected] => NULL
  ["_attributes":protected] => array(2) {
    [0] => array(2) {
      ["id"] => string(1) "3"
      ["name"] => string(4) "Size"
    }
    [1] => array(2) {
      ["id"] => string(1) "4"
      ["name"] => string(6) "Length"
    }
  }

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 августа 2010

Все зависит от вашего варианта использования:

Индексация по ID или позиции:

  • Если вам нужна скорость при доступе к определенному атрибуту, индексируйте атрибуты по их идентификаторам, а не по позиции индекса.
  • Если вы хотите сохранить ордер, упорядочите его по позиции индекса и величине смещения позиции.

Независимая таблица против локального массива:

  • Если атрибуты продублированы в нескольких элементах, укажите их в качестве собственной таблицы и свяжите атрибуты с этой таблицей.
  • Если атрибуты не раскрываются и являются уникальными для каждого элемента, то их использование в качестве сериализуемых массивов (для хранения) является более подходящим, чем необходимость их использования в качестве собственной таблицы.
0 голосов
/ 11 августа 2010

В случае _attributes я бы использовал массив объектов. Так что его атрибуты будут массивом новой модели Attribute ()

Я создаю класс для каждой сущности бизнес-модели

["_attributes":protected] => array(2) {
    [0] => Object(Model_Attribute) {}
    [1] => Object(Model_Attribute) {}
}

class Model_Attribute {
  protected $id;
  public function getId();
  public function setId($id);
  .
  .
  .
}

Я предлагаю вам взглянуть на Doctrine ORM 2.0 , так как он может поддерживать дизайн, описанный выше. Посмотрите на эту страницу, она может дать вам подсказку: http://www.doctrine -project.org / проекты / ОРМ / 2,0 / документы / ссылки / ассоциации-отображение / ан

...