Obter associações originais depois de usar o comportamento Contêiner no CakePHP

Fundo: CakePHP 2.6.3. Um aplicativo bastante estável. Novo comportamento (MyCustomBehavior) criado para gerar algumas informações extras. Eu tenho um modeloMyModel agindo comoContainable (definido emAppModel) e depoisMyCustom (definido emMyModel)MyCustomBehavior foi escrito de uma maneira que ele precisa trabalhar com as associações do modelo com outros modelos no meu aplicativo.

Problema: Sempre que eu tiver modelos relacionados no meufind() chamada deMyModel, Não consigo obter uma lista completa deMyModel associações porqueContainable comportamento desassocia os modelos que não estão contidos. No entanto, se eu não definircontain no meufind() opções ou conjunto'contain' => false tudo funciona como esperado.

AmostraMyModel->belongsTo

public $belongsTo = array(
    'MyAnotherModel' => array(
        'className' => 'MyAnotherModel',
        'foreignKey' => 'my_another_model_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Creator' => array(
        'className' => 'User',
        'foreignKey' => 'user_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Approver' => array(
        'className' => 'User',
        'foreignKey' => 'approver_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
    'Status' => array(
        'className' => 'Status',
        'foreignKey' => 'status_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    ),
);

Amostrafind()

$this->MyModel->find('all', array(
    'fields' => array(...),
    'conditions' => array(...),
    'contain' => array('Approver', 'Status')
));

Resultado deMyModel->belongsTo noMyCustomBehavior::beforeFind()

$belongsTo = array(
    'Approver' => array(
        ...
    ),
    'Status' => array(
        ...
    ),
);

EsperadoMyModel->belongsTo noMyCustomBehavior::beforeFind()

$belongsTo = array(
    'MyAnotherModel' => array(
        ...
    ),
    'Creator' => array(
        ...
    ),
    'Approver' => array(
        ...
    ),
    'Status' => array(
        ...
    ),
);

Solução óbvia: Uma maneira idiota de resolver o problema é simplesmente definirContainable comportamento emMyModel ao invés deAppModel para controlar a ordem de carregamento dos comportamentos, ou seja,public $actsAs = ['MyCustom', 'Containable']. Essa solução não é a melhor porque pode haver outros comportamentos em outros modelos que dependem deContainable, então a ordem deContainable precisa definir explicitamente em cada modelo no aplicativo e espero que não o quebrei em algum lugar.

Uma pergunta semelhante (relacionada) foi feita no SOaqui mas não tem respostas.

Precisa de uma solução mais robusta que possa atender às necessidades deMyCustomBehavior sem precisar fazer alterações no restante do aplicativo e sem olhar para comportamentos inesperados.

questionAnswers(1)

yourAnswerToTheQuestion