带有连接的zf2实体

时间:2013-10-17 10:36:07

标签: zend-framework2 entity mapper

我需要结合几个表的信息。 在使用实体的情况下,我应该为它们创建所有可能的字段作为属性+ setter / getters。 但是在保存对象时 - 我应该拆分/取消设置不在主表中的所有属性。

可能有更多的“真实”方式来处理它,而不使用教条等。

1 个答案:

答案 0 :(得分:1)

如果我是你,我会仔细看看Hydrators:

ZF2 docs on hydrators

创建一个实现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(),
        ),
    );
}

然后,当您提取数据时,可以将每组数据传递到正确的表中以进行插入或更新。