Alt for mange kodere forsøger at begrænse sig til funktionaliteten af et framework. GØR IKKE. Brug det, som rammerne giver. Hvis den ikke har den funktionalitet, du søger, så enten:
- Kod den funktionalitet, du har brug for, i en klasseudvidelse
eller
- Tilpas spin koden inden for rammerne, så den passer til dine behov.
Ofte forsøger udviklere at hamre en firkantet pind ind i et rundt hul og ender med at lave alt for meget ekstra arbejde, der egentlig kun gør koden kompliceret. Træd et skridt tilbage og spørg, hvorfor du bruger rammen til at begynde med. Det bringer struktur til et ustruktureret sprog. Det giver et solidt genanvendeligt fundament at bygge din applikation på. Det er ikke meningen, at det skal være en boks at sætte sig selv i og begrænses.
OPDATERING:Jeg brugte et minut på at læse Komplekse søgebetingelser og fandt dit svar:
$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);