}
// since roo does not support autojoin yet..
- $this->autoJoinExtra();
+ if (!isset($q['_distinct'])) {
+ $this->autoJoinExtra();
+ }
function autoJoinExtra()
{
//$ret = parent::autoJoin();
- //DB_DataObject::debugLevel(1);
+ // DB_DataObject::debugLevel(1);
// now try and magically join person_table to the right table..
$tn = $this->tableName();
$tbls = $pt->fetchAll('person_table');
$pers = DB_DataObject::Factory('Person');
$ptbl = $pers->tableName();
- if (!in_array($pers->tableName(),$tbls)) {
+ if (!in_array($ptbl,$tbls)) {
$tbls[] = $ptbl;
}
// find all the columns from the joined table..
$st = DB_DataObject::Factory($tbl);
$tcols = array_keys($st->table());
+
+ $cond = "{$tn}.person_table = '{$tbl}'";
+ if ($tbl == $ptbl) {
+ $cond = "( $cond OR {$tn}.person_table = '')";
+ }
+
foreach($tcols as $col) {
if ($col == 'passwd') {
continue;
}
$cols[$col] = isset($cols[$col] ) ? $cols[$col] : array();
- $cols[$col][] = "WHEN {$tn}.person_table = '$tbl' THEN join_person_table_{$tbl}.{$col}";
+ $cols[$col][] = "WHEN $cond THEN join_person_table_{$tbl}.{$col}";
}
// id's are hard coded...
- $cond = "{$tn}.person_table = '{$tbl}'";
- if ($tbl = $ptbl) {
- $cond = "( $cond OR {$tn}.person_table == '')";
- }
+
$this->_join .= "
LEFT JOIN {$tbl} AS join_person_table_{$tbl}
ON {$tn}.person_id = join_person_table_{$tbl}.id
$this->selectAdd("
CASE
". implode("\n", $whens) ."
- ELSE join_person_table_{$ptbl}
+ ELSE ''
END
as person_table_{$col}"
);