Muitos codificadores tentam se limitar à funcionalidade de um framework. NÃO. Use o que a estrutura fornece. Se ele não tiver a funcionalidade que você procura, então:
- Codifique a funcionalidade necessária em uma extensão de classe
ou
- Personalize o código dentro da estrutura para atender às suas necessidades.
Muitas vezes, os desenvolvedores tentam martelar um pino quadrado em um buraco redondo e acabam fazendo muito trabalho extra que realmente só torna o código complicado. Dê um passo para trás e pergunte por que você está usando a estrutura para começar. Ele traz estrutura para uma linguagem não estruturada. Ele fornece uma base reutilizável sólida para construir seu aplicativo. Não se destina a ser uma caixa para se colocar e ser limitado.
ATUALIZAÇÃO:levei um minuto para ler Condições de localização complexas e encontrei sua resposta:
$joins = array(
array(
'table' => 'test_twos',
'alias' => 'TestTwo',
'type' => 'LEFT',
'conditions' => array(
'TestTwo.id = TestOne.id',
)
),
array(
'table' => 'test_threes',
'alias' => 'TestThree',
'type' => 'LEFT',
'conditions' => array(
'TestThree.id = TestOne.id',
)
)
);
$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
array(
'fields' => array('*'),
'table' => $dbo->fullTableName($this),
'alias' => 'TestOne',
'limit' => null,
'offset' => null,
'joins' => $joins,
'conditions' => null,
'order' => null,
'group' => null
),
$this->TestOne
);
$query = $subQuery;
$query .= ' UNION ';
$joins = array(
array(
'table' => 'test_twos',
'alias' => 'TestTwo',
'type' => 'LEFT',
'conditions' => array(
'TestTwo.id = TestOne.id',
)
),
array(
'table' => 'test_threes',
'alias' => 'TestThree',
'type' => 'RIGHT',
'conditions' => array(
'TestThree.id = TestOne.id',
)
)
);
$dbo = $this->getDataSource();
$subQuery = $dbo->buildStatement(
array(
'fields' => array('*'),
'table' => $dbo->fullTableName($this),
'alias' => 'TestOne',
'limit' => null,
'offset' => null,
'joins' => $joins,
'conditions' => null,
'order' => null,
'group' => null
),
$this->TestOne
);
$query .= $subQuery;
pr($query);