在控制器zf2 doctrine2中使用动态实体

时间:2013-01-04 15:35:10

标签: php doctrine doctrine-orm zend-framework2

如何在使用Doctrine 2的Zend框架2中的控制器操作中使用动态实体名称?

例如。

public function indexAction()
    {
        return new ViewModel(array(
            'albums' => $this->getEntityManager()->getRepository('Album\Entity\[dynamic_entity_name]')->findAll() 
        ));
    }

另外,首先,我是否可以在一个控制器中使用多个实体,就像我的情况一样?

做这样的事情的根源是,我的应用程序基本上有两种模式,实时和测试,用户可以在任何模式下保存数据(类似于沙箱和实时模式)支付网关后端)。

我需要有两个不同的表,每个模式一个;例如,对于用户付款的payment_test和payment_live表。

因此,在我的控制器中,基于用户正在使用的当前模式(测试或实时),应该从相应的实体(PAYMENT_LIVE或PAYMENT_TEST)检索/保存数据。

我认为在所有地方检查当前模式的条件是一个坏主意,因此我将在一些CURRENT_MODE CONSTANT中设置一次,然后使用它动态使用实体名称,如:

    public function indexAction()
        {
            return new ViewModel(array(
                'payments' => $this->getEntityManager()->getRepository('Payment\Entity\Payment_'.CURRENT_MODE.')->findAll() 
));
        }

将根据CURRENT_MODE =“live”或“test”的值,将Payment_live实体用于实时模式,将Payment_test实体用于测试模式。

有什么想法我应该如何实现这个?

1 个答案:

答案 0 :(得分:1)

我的第一个想法是:为什么有两个表而不仅仅是一个标识符来查询模式。一个字段会向你表paymentspayment_modus(可能是真实/假的布尔值)或其他东西。

除此之外,当然您可以在一个控制器中拥有多个存储库。

$repo = 'Payment\Entity\Payment_'.$this->getCurrentMode();
$em->getRepository($repo);

有点难以回答,因为我真的不明白你的问题究竟在哪里。