2014-02-17 87 views
0

我不太清楚如何用CakePHP完成此任务。我有3种型号:蛋糕模型协会

ReportType: id/name 

Example Data: 

1/Report1 
2/Report2 

ReportData: id/report_type_id (matches ReportType)/row_number (matches row number in CSV)/data 

Example Data: 

1/1/1/longstring1 
2/1/1/longstring1-2 
3/1/1/longstring1-3 
4/1/2/longstring2 
5/1/3/longstring3 
6/1/4/longstring4 

PaymentData: id/report_type_id (matches ReportType)/row_number (matches row number in CSV)/payment_amount 

Example Data: 

1/1/1/5 
2/1/2/6 
3/1/3/78 
4/1/5/9 

ReportType: 
HasMany: ReportData, PaymentData 

实例查询:

$this->ReportType->contain('PaymentData'); 
$payment_data = $this->ReportType->find('first'); 

眼下,这将产生:

[ReportType] 
    id => 1 
    name => Report1 

[PaymentData] 
    [0] => 
     id => 1 
     report_type_id => 1 
     row_number => 1 
     payment_amount => 5 
    [1] => 
     id => 1 
     report_type_id => 1 
     row_number => 2 
     payment_amount => 6 

    (and so on) 

我想做什么就能做的是为每个PaymentData行,能够匹配reportData中的report_type_id和row_number匹配的行(我只需要1行)。例如,我想返回的数据是:

[ReportType] 
    id => 1 
    name => Report1 

[PaymentData] 
    [0] => 
     id => 1 
     report_type_id => 1 
     row_number => 1 
     payment_amount => 5 

     [ReportData] => (matched by report_type_id and row_number for PaymentData above) 
      [0] => 
       id => 1 
       report_type_id => 1 
       row_number => 1 
       data => longstring1 
    [1] => 
     id => 1 
     report_type_id => 1 
     row_number => 2 
     payment_amount => 6 

     [ReportData] => (matched by report_type_id and row_number for PaymentData above) 
      [0] => 
       id => 4 
       report_type_id => 1 
       row_number => 2 
       data => longstring2 

回答

0

你可以尝试做contain内的比赛:

$payment_data = $this->ReportType->find('first', array(
    'contain' => array(
     'PaymentData' => array(
      'ReportData' => array(
       'conditions' => array(
        'PaymentData.report_type_id' => 'ReportData.report_type_id', 
        'PaymentData.row_numbrer' => 'ReportData.row_number' 
       ) 
      ) 
     ) 
    ) 
)); 

假设ReportType有许多PaymentData而这其中有很多ReportData