我想知道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或对象。)
答案 0 :(得分:4)
是和否。是:您可以使用子查询将所有公司标题ID选择到一个单独的字段中并手动将其消化为数组。实际上没有...根据this
否:如果您希望保持一对多关系,并且能够在不加载所有数据的情况下执行$companies[0]->companyTitles
,则无法执行此操作。在普通的SQL中,这几乎是不可能的,而且很简单。
任何ORM都试图从直接处理sql中抽象出来,这将总是花费你的功能(不能重新考虑所有内容而不重新发明轮子)和性能(查询编译,非最佳查询,多个查询)等)使用普通的sql。 Phalcon是一个了不起的项目,但与其他支持ORM或ORM框架的框架一样,在这样的情况下,它不会超越你。在遇到太多死胡同之后,我已经停止使用原生的Phalcon模型,它们对于简单的任务来说非常棒,但是对于更复杂的东西,它们会遇到问题。
如果你的时间优先,那就坚持你所拥有的。额外查询额外10-50毫秒不会发生太大变化。如果您需要一个可维护的代码库,这是一个大而长期运行的项目,那么这是一个冒险的前进方式。当事情变得更复杂时,这真的变得不可靠。使用更成熟的ORM,我个人在illuminate/database取得了巨大的成功,用于构建查询和手动将数据映射到模型 - 我不得不说这是非常耗时的。