正确地将2张桌子与cakephp连接起来

时间:2013-10-25 01:54:53

标签: cakephp

我想弄清楚是否有办法正确链接我的模型以实现以下目标:

我有3张桌子,客户 - >倡议 - >里程碑。

在我拥有的客户中:

public $hasMany = array( 'Initiative'  );

在倡议模型中,我有:

public $belongsTo = 'Client';
public $hasMany = 'Milestone'

而且里程碑有:

public $belongsTo = 'Initiative';

使用public $ recursive = 2;在客户端模型中,我能够将里程碑嵌入到结果的计划中,所以它们看起来像这样......

array(2) {
["Client"]=>
array(3) {
  ["id"]=>
  string(1) "3"
  ["name"]=>
  string(17) "Company"
 }
["Initiative"]=>
array(5) {  
  [0]=>
  array(8) {
    ["id"]=>
    string(1) "6"
    ["client_id"]=>
    string(1) "3"
    ["Milestone"]=>
    array(4) {
      [0]=>
      array(6) {
        ["id"]=>
        string(1) "1"
        ["initiative_id"]=>
        string(1) "6"
       }
      [1]=>
      array(6) {
        ["id"]=>
        string(1) "2"
        ["initiative_id"]=>
        string(1) "6"
      }

或者使用简短的手:

result
  [client]
  [initiative]
        [milestone]     

但是,为方便起见,我想要的是模型返回里程碑,因为它自己的数组没有嵌套在主动中。所以,

result
  [client]
  [initiative]
  [milestone]

我想我需要在我的模型中设置某种自定义查询。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

我认为,这是不可能的,因为

客户--- hasMany --->倡议

一项倡议--- hasMany --->里程碑

因此,如果您获得了客户信息,那么多个计划将会检索到,如果您将获得一项计划,那么将有多个里程碑。

如果您仍希望合并所有里程碑并在第一级显示,则必须遍历数组值并手动检索里程碑。