Demasiados codificadores intentan limitarse a la funcionalidad de un marco. NO. Use lo que proporciona el marco. Si no tiene la funcionalidad que buscar, entonces:
- Código la funcionalidad que necesita en una extensión de clase
o
- personalizada girar el código en el marco para adaptarse tus necesidades.
A menudo, los desarrolladores intentan clavar una clavija cuadrada en un agujero redondo y terminan haciendo demasiado trabajo extra que realmente solo complica el código. Da un paso atrás y pregunta por qué estás usando el marco para empezar. Trae la estructura a un lenguaje no estructurado. Proporciona una base reutilizable sólida para construir su aplicación. No pretende ser una caja para ponerse y ser limitado.
ACTUALIZACIÓN: Me tomó un minuto para leer Complex Find Conditions y encontró su respuesta:
$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);
¿Hay alguna razón por la que desea evitar $ this-> consulta? – Stoosh
Bueno, por un lado, se frustra el propósito de usar un marco si no vas a tratar de escribir una aplicación en el estilo nativo del marco. Y la mayoría de las consultas 'SELECT' se pueden llevar a cabo utilizando' find() 'en 1.3.Además, 'find()' se beneficia de la protección incorporada de los controladores de fuente de datos contra las inyecciones de SQL, mientras que 'query()' es una consulta directa de la que tendría que escapar usted mismo. Dicho esto, 'UNION' es probablemente una de las pocas clases de consultas que no puedes ejecutar usando' find() '. –
¿Tiene un ejemplo válido de unión MySQL que está ejecutando? El que está en la lista no funciona. –