Skip to content

Commit

Permalink
Moving 'joins' key conversion into DboSource::buildJoinStatement()
Browse files Browse the repository at this point in the history
Having this in Model felt like the wrong layer for it to reside.
This also simplifies a few things internally.
Refs #1517
  • Loading branch information
markstory committed Sep 28, 2011
1 parent 6afa21c commit d489d49
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 11 deletions.
13 changes: 8 additions & 5 deletions cake/libs/model/datasources/dbo_source.php
Expand Up @@ -1297,7 +1297,7 @@ function generateAssociationQuery(&$model, &$linkModel, $type, $association = nu
$query = array_merge(array('order' => $assocData['order'], 'limit' => $assocData['limit']), $query); $query = array_merge(array('order' => $assocData['order'], 'limit' => $assocData['limit']), $query);
} else { } else {
$join = array( $join = array(
'table' => $this->fullTableName($linkModel), 'table' => $linkModel,
'alias' => $alias, 'alias' => $alias,
'type' => isset($assocData['type']) ? $assocData['type'] : 'LEFT', 'type' => isset($assocData['type']) ? $assocData['type'] : 'LEFT',
'conditions' => trim($this->conditions($conditions, true, false, $model)) 'conditions' => trim($this->conditions($conditions, true, false, $model))
Expand Down Expand Up @@ -1336,7 +1336,7 @@ function generateAssociationQuery(&$model, &$linkModel, $type, $association = nu
$joinKeys = array($assocData['foreignKey'], $assocData['associationForeignKey']); $joinKeys = array($assocData['foreignKey'], $assocData['associationForeignKey']);
list($with, $joinFields) = $model->joinModel($assocData['with'], $joinKeys); list($with, $joinFields) = $model->joinModel($assocData['with'], $joinKeys);


$joinTbl = $this->fullTableName($model->{$with}); $joinTbl = $model->{$with};
$joinAlias = $joinTbl; $joinAlias = $joinTbl;


if (is_array($joinFields) && !empty($joinFields)) { if (is_array($joinFields) && !empty($joinFields)) {
Expand All @@ -1346,8 +1346,8 @@ function generateAssociationQuery(&$model, &$linkModel, $type, $association = nu
$joinFields = array(); $joinFields = array();
} }
} else { } else {
$joinTbl = $this->fullTableName($assocData['joinTable']); $joinTbl = $assocData['joinTable'];
$joinAlias = $joinTbl; $joinAlias = $this->fullTableName($assocData['joinTable']);
} }
$query = array( $query = array(
'conditions' => $assocData['conditions'], 'conditions' => $assocData['conditions'],
Expand Down Expand Up @@ -1436,6 +1436,9 @@ function buildJoinStatement($join) {
if (!empty($data['conditions'])) { if (!empty($data['conditions'])) {
$data['conditions'] = trim($this->conditions($data['conditions'], true, false)); $data['conditions'] = trim($this->conditions($data['conditions'], true, false));
} }
if (!empty($data['table'])) {
$data['table'] = $this->fullTableName($data['table']);
}
return $this->renderJoinStatement($data); return $this->renderJoinStatement($data);
} }


Expand Down Expand Up @@ -1730,7 +1733,7 @@ function _getJoins($model) {
if (isset($model->{$assoc}) && $model->useDbConfig == $model->{$assoc}->useDbConfig) { if (isset($model->{$assoc}) && $model->useDbConfig == $model->{$assoc}->useDbConfig) {
$assocData = $model->getAssociated($assoc); $assocData = $model->getAssociated($assoc);
$join[] = $this->buildJoinStatement(array( $join[] = $this->buildJoinStatement(array(
'table' => $this->fullTableName($model->{$assoc}), 'table' => $model->{$assoc},
'alias' => $assoc, 'alias' => $assoc,
'type' => isset($assocData['type']) ? $assocData['type'] : 'LEFT', 'type' => isset($assocData['type']) ? $assocData['type'] : 'LEFT',
'conditions' => trim($this->conditions( 'conditions' => trim($this->conditions(
Expand Down
5 changes: 0 additions & 5 deletions cake/libs/model/model.php
Expand Up @@ -2132,11 +2132,6 @@ function find($conditions = null, $fields = array(), $order = null, $recursive =
if (!$db =& ConnectionManager::getDataSource($this->useDbConfig)) { if (!$db =& ConnectionManager::getDataSource($this->useDbConfig)) {
return false; return false;
} }
if (!empty($query['joins']) && is_array($query['joins'])) {
foreach($query['joins'] as $i => $join) {
$query['joins'][$i]['table'] = $db->fullTableName($join['table']);
}
}
$results = $db->read($this, $query); $results = $db->read($this, $query);
$this->resetAssociations(); $this->resetAssociations();


Expand Down
Expand Up @@ -1461,6 +1461,7 @@ function testGenerateAssociationQuerySelfJoin() {
'order' => array(), 'order' => array(),
'group' => null 'group' => null
); );
$queryData['joins'][0]['table'] = $this->testDb->fullTableName($queryData['joins'][0]['table']);
$this->assertEqual($queryData, $expected); $this->assertEqual($queryData, $expected);


$result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null); $result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null);
Expand Down
2 changes: 1 addition & 1 deletion cake/tests/cases/libs/model/model_read.test.php
Expand Up @@ -5158,7 +5158,7 @@ function testHabtmFinderQuery() {
'group' => null, 'group' => null,
'joins' => array(array( 'joins' => array(array(
'alias' => 'ArticlesTag', 'alias' => 'ArticlesTag',
'table' => $this->db->fullTableName('articles_tags'), 'table' => 'articles_tags',
'conditions' => array( 'conditions' => array(
array("ArticlesTag.article_id" => '{$__cakeID__$}'), array("ArticlesTag.article_id" => '{$__cakeID__$}'),
array("ArticlesTag.tag_id" => $this->db->identifier('Tag.id')) array("ArticlesTag.tag_id" => $this->db->identifier('Tag.id'))
Expand Down

0 comments on commit d489d49

Please sign in to comment.