PhalconPHP:急切负载相关记录?

时间:2014-09-13 00:17:41

标签: php orm phalcon

我想知道Phalcon最好的办法是......

我有这两个模型:公司和公司标题。

公司与CompanyTitles有一对多的关系。

当我打电话给所有公司时,如下:

$companies = Companies::find($params)

我可以通过

获得特定公司的所有公司标题
$companies[0]->companyTitles
例如,

。但是,是否有办法同时为所有这些提供公司标题,以便我们只对数据库进行一次调用?!

我正在做的是构建API,我希望能够发回这样的内容:

{
    "companies": [
        {
            "id": 1,
            "name": "Bob Co"
            "companyTitles": [1, 2, 3, 4]
        },
        {
            "id": 2,
            ...
        }
 }

(我只是将id放在那里作为占位符,但你明白了。虽然从技术上讲,它可能是id或对象。)

1 个答案:

答案 0 :(得分:4)

是和否。是:您可以使用子查询将所有公司标题ID选择到一个单独的字段中并手动将其消化为数组。实际上没有...根据this

否:如果您希望保持一对多关系,并且能够在不加载所有数据的情况下执行$companies[0]->companyTitles,则无法执行此操作。在普通的SQL中,这几乎是不可能的,而且很简单。

任何ORM都试图从直接处理sql中抽象出来,这将总是花费你的功能(不能重新考虑所有内容而不重新发明轮子)和性能(查询编译,非最佳查询,多个查询)等)使用普通的sql。 Phalcon是一个了不起的项目,但与其他支持ORM或ORM框架的框架一样,在这样的情况下,它不会超越你。在遇到太多死胡同之后,我已经停止使用原生的Phalcon模型,它们对于简单的任务来说非常棒,但是对于更复杂的东西,它们会遇到问题。

如果你的时间优先,那就坚持你所拥有的。额外查询额外10-50毫秒不会发生太大变化。如果您需要一个可维护的代码库,这是一个大而长期运行的项目,那么这是一个冒险的前进方式。当事情变得更复杂时,这真的变得不可靠。使用更成熟的ORM,我个人在illuminate/database取得了巨大的成功,用于构建查询和手动将数据映射到模型 - 我不得不说这是非常耗时的。