CakePHP Containable:如何设置深层条件


CakePHP Containable: how to set deep conditions?

模型关联

  • 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();

所有关联都设置在模型中。

我知道我可以使用递归选项来实现这一点,但我不喜欢使用它,因为它返回了很多不必要的数据,而且速度很慢。我也可以使用联接,但使用联接是一种很好的做法吗?

在这样的场景中使用可控制的行为确实很忙,会检索到很多不必要的数据。您可能需要取消绑定和取消设置不需要的。

作为替代方案,我建议您使用联接。它速度更快、更灵活,尤其是在你提到的这种情况下。

你可以参考以下链接:

CakePHP CookBook:关联并加入

CakePHP:连接多个表

希望这能有所帮助。

和平!xD