1

一个公司对象可以有许多站点对象。对于给定的公司,我想知道主站点。(isPrimary 是 Site 的一个属性)。

我在 Company 类中编写了一个名为 getPrimarySite() 的函数,并像这样实现它。

public function getPrimarySiteForCompany()
    {
        foreach($this->getSite() as $site)
        {
            if($site->isPrimary())
            {
                return $site;
            }
        }

        return false;
    }

这可以吗,还是在 CompanyRepository 中编写自定义存储库函数更好,我可以在其中使用 DQL 获取主站点?

4

2 回答 2

1

如果公司只能有一个主站点,自然的解决方案是向Company::$primarySite公司实体添加一个新属性。这将是 [One|Many]ToOne 关系(取决于一个站点是否可以属于多个公司)。查找会很快,然后您的数据层会强制执行公司只能拥有一个主站点的逻辑。这比在站点上设置 isPrimary 标志更有意义,然后必须确保属于同一公司的两个站点没有同时设置该标志。

于 2013-06-05T23:28:42.473 回答
1

虽然编写自定义存储库函数来加入数据并防止延迟加载并不难,但这是过早优化的一个很好的例子。

暂时保持原样,一旦一切都在生产中正常运行,您可以返回开发并使用分析器来查看性能方面可以改进的地方。此外,如果您只期望几个 Site 对象,那么它可能并不重要,如果有的话。

于 2013-06-06T00:26:05.890 回答