сущность zf2 с соединениями

Мне нужно объединить информацию из нескольких таблиц. В случае использования сущности я должен создать все возможные поля как свойства + сеттеры/геттеры для них. Но при сохранении объекта я должен разделить/сбросить все свойства, которых нет в основной таблице.

Возможно, есть более «верный» способ справиться с этим, не используя доктрину и т. д.


person Immediate    schedule 17.10.2013    source источник


Ответы (1)


На вашем месте я бы присмотрелся к Hydrators:

Документы ZF2 по гидраторам

Создайте новый класс, реализующий HydratorInterface:

namespace Zend\Stdlib\Hydrator;

interface HydratorInterface
{
    /**
     * Extract values from an object
     *
     * @param  object $object
     * @return array
     */
    public function extract($object);

    /**
     * Hydrate $object with the provided $data.
     *
     * @param  array $data
     * @param  object $object
     * @return void
     */
    public function hydrate(array $data, $object);
}

Вам нужно реализовать 2 функции:

extract($object);

Extract создаст массив из объекта.

hydrate(array $data, $object);

Hydrate создаст объект из массива.

Когда вы делаете выбор, вы можете иметь все поля в 1 массиве, поэтому у вас нет проблем с помещением его в объект. При извлечении вы хотите разделить его. Вы можете реализовать извлечение таким образом:

public function extract($object)
{
    return array(
        'tbl1' => array(
            'fld1' => $object->getFld1(),
            'fld2' => $object->getFld2(),
            'fld3' => $object->getFld3(),
        ),
        'tbl2' => array(
            'fld4' => $object->getFld4(),
            'fld5' => $object->getFld5(),
        ),
        'tbl3' => array(
            'fld6' => $object->getFld6(),
            'fld7' => $object->getFld7(),
            'fld8' => $object->getFld8(),
            'fld9' => $object->getFld9(),
        ),
    );
}

Когда вы затем извлекаете данные, вы можете передать каждую группу данных в правильную таблицу для вставки или обновления.

person Jeroen    schedule 21.10.2013