Orm 在Symfony2中,我应该使用实体还是自定义存储库

Orm 在Symfony2中,我应该使用实体还是自定义存储库,orm,symfony,Orm,Symfony,我正在创建一个新的web应用程序,希望在设计计划方面得到一些帮助 我有“存储”对象,每个对象都有许多“消息”对象。我想显示一个商店页面,显示该商店的消息。使用教义,我用 但是,我想按相反的时间顺序显示消息。因此,我添加了一个: * @ORM\OrderBy({"whenCreated" = "DESC"}) 我仍然在调用“store”对象,然后调用 $store->getMessages(); 现在我想显示已“验证”的消息。此时,我不确定如何使用@ORM实现这一点,所以我想我需要一个自

我正在创建一个新的web应用程序,希望在设计计划方面得到一些帮助

我有“存储”对象,每个对象都有许多“消息”对象。我想显示一个商店页面,显示该商店的消息。使用教义,我用

但是,我想按相反的时间顺序显示消息。因此,我添加了一个:

* @ORM\OrderBy({"whenCreated" = "DESC"})
我仍然在调用“store”对象,然后调用

$store->getMessages();
现在我想显示已“验证”的消息。此时,我不确定如何使用@ORM实现这一点,所以我想我需要一个自定义存储库层

我的问题有两个:

  • 首先,我可以使用Entity@ORM框架来实现这一点吗
  • 第二,包装这个数据库查询的正确方法是什么

  • 我知道我最终想要SQL
    SELECT*FROM消息,其中verified=1,store_id=?按myTime说明下单
    但如何使之成为“Symfony2方式”

    对于问题的第一部分。。。从技术上讲,我认为您可以做到这一点,但我不认为您能够以有效的方式做到这一点,或者以不违背良好做法的方式做到这一点(即将实体经理注入您的实体)

    你的问题很有意思,因为乍一看,我也会想到使用
    $store->getMessages()
    。但是由于您的自定义条件,我认为您最好使用自定义的消息存储库类。然后您可能会有如下方法

    $messageRepo->getForStoreOrderedBy($storeId,$orderBy)

    $messageRepo->getForStoreWhereVerified($storeId)

    现在,您可以使用像
    $Store->getMessagesWhereVerified()
    这样的方法从存储实体执行此操作,但我认为您会污染存储实体,特别是如果您需要越来越多的自定义方法。我认为,通过将它们保存在消息存储库中,您可以以更干净的方式分离您的关注点。此外,使用消息存储库,您可能不需要首先获取Store对象来保存查询,因为您只需要查询Message表并在WHERE子句中使用它的
    Store\u id

    希望这有帮助