2016-03-22 69 views
1

模型關聯CakePHP Containable:如何設置深層條件?

  • InfoFaturamento屬於Contrato
  • Contrato有許多ContratoCliente
  • ContratoCliente有許多VwCliente

我想獲取所有VwClientes其中InfoFaturamento等於過去了一個id參數。有可能做到這一點,而不使用連接選項?

這是我試過的代碼。它返回全部ContratoCliente

$test = $this->InfoFaturamento->Contrato->ContratoCliente->find('all', [ 
    'contain' => [ 
     'Contrato' => [ 
      'InfoFaturamento' => [ 
       'conditions' => [ 
        'InfoFaturamento.id' => $idInfoFaturamento 
       ] 
      ] 
     ] 
    ], 
]); 
debug($test); die(); 

所有關聯都在模型中設置。

我知道我可以使用遞歸選項來做到這一點,但我不喜歡使用它,因爲它返回大量不必要的數據,而且速度很慢。我也可以使用連接,但使用連接是一個好習慣嗎?

回答

1

對這樣的場景使用可容忍的行爲確實很繁瑣,並且檢索了大量不必要的數據。您可能必須解除並取消不需要的。

作爲替代,我建議你使用連接。它速度更快,方式更靈活,尤其適用於您提到的那種情況。

您可以參考以下鏈接:

CakePHP CookBook: Associations and joins

CakePHP: Joining multiple tables

希望這有助於。

和平! xD

+0

我認爲這是相反的,使用Containable將是這些情景的最佳實踐。謝謝。我會使用連接。 –