有人知道在CakePHP中进行UNION查询的好方法吗?我想避免使用$this->query();。
$this->query();
有两个表t1,t2:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id
对于三个表t1,t2,t3:
SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id LEFT JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id LEFT JOIN t3 ON t2.id = t3.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id RIGHT JOIN t3 ON t2.id = t3.id
太多的编码人员试图将自己局限于框架的功能。别。使用框架提供的内容。如果它不具有您想要的功能,则可以:
要么
通常,开发人员试图将一个方形钉锤入一个圆孔中,然后进行过多的额外工作,这实际上只会使代码变得复杂。退后一步,问一问为什么要使用该框架。它使结构成为一种非结构化的语言。它为构建您的应用程序提供了坚实的可重用基础。并不是要成为一个让自己陷入困境的盒子。
更新:我花了一点时间阅读“ 复杂查找条件”并找到了答案:
$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);