Troppi codificatori cercano di limitarsi alla funzionalità di un framework. NON FARE. Usa ciò che offre il framework. Se non ha la funzionalità che cercate, allora:
- codice le funzionalità necessarie in un'estensione di classe
o
- personalizzato girare il codice nel quadro per soddisfare I tuoi bisogni.
Spesso gli sviluppatori cercano di battere un piolo quadrato in un buco rotondo e finiscono per fare troppo lavoro extra che rende davvero complicato il codice. Fai un passo indietro e chiedi perché stai usando la struttura per cominciare. Porta la struttura a un linguaggio non strutturato. Fornisce solide fondamenta riutilizzabili su cui costruire la tua applicazione. Non è destinato a essere una scatola per mettersi ed essere limitato.
UPDATE: ho preso un minuto per leggere Complex Find Conditions e ha trovato la risposta:
$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);
C'è qualche motivo per cui si desidera evitare $ this-> ricerca? – Stoosh
Beh, per uno, sconfigge lo scopo di usare un framework se non hai intenzione di provare a scrivere un'applicazione nello stile nativo del framework. E la maggior parte delle query 'SELECT' possono infatti essere eseguite usando' find() 'in 1.3.Inoltre, 'find()' trae vantaggio dalla protezione integrata dei driver dei sorgenti di dati contro le iniezioni SQL, mentre 'query()' è una query diretta che dovrete sfuggire a voi stessi. Detto questo, 'UNION' è probabilmente una delle poche classi di query che non è possibile eseguire usando' find() '. –
Hai un esempio di unione MySQL valida in esecuzione? Quello elencato non funziona. –