CakePHP - 递归模型中的特定字段?

时间:2010-04-19 16:11:18

标签: php cakephp cakephp-appmodel

我对CakePHP很新,但我想我已经开始了解它。我试图递归地提取相关的表信息,但我想指定要递归的相关模型。让我举个例子来证明我的目标:

我有一个模型“客户”,其中包含公司名称,网站等信息。“客户”有许多“地址”,其中包含联系人姓名,街道,城市,州,国家等个别联系人的信息。 “客户”也属于“客户类型”,它只是具有描述性类别信息 - 名称和描述,如“分销商”或“制造商”。

当我对“客户”进行查找时,我希望将“CustomerType”和“Address”信息关联为子数组,只需正确设置hasMany和belongsTo关联即可。但现在,这是我的问题:我希望得到相关的州/国家信息。因此,不是每个“地址”数组行只有“state_id”,我希望它具有“state”=>数组(“id”= 20,“name”=“纽约”,......)等。

如果我在合作伙伴模型中将$ recursive设置为更高的值(例如2),我会得到我想要的每个“地址”中的州/国家/地区信息。但它也会对“CustomerType”进行递归,这会导致我的“Partner”对象的“CustomerType”字段中包含大量与该类型匹配的所有Customer对象,这些对象可能需要数千个。

所以重点是,我不想仅仅在“地址”上对“CustomerType”进行递归。有没有办法可以设置它?

抱歉这个冗长的问题,并提前致谢!

2 个答案:

答案 0 :(得分:9)

我建议您使用“可包含”行为; 请参阅本书中有关蛋糕网站的更多帮助:http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

答案 1 :(得分:3)

有时可包含会生成太多查询。实现您想要的另一个选择是取消绑定CustomerType模型。您可以在此处找到更多详细信息:http://teknoid.wordpress.com/2008/07/17/forcing-an-sql-join-in-cakephp/http://mark-story.com/posts/view/using-bindmodel-to-get-to-deep-relations