Permalink
Browse files

Fixed duplication of Model's afterFind callback in HABTM relation and…

… content of array passed to that callback [ticket 3970]
  • Loading branch information...
1 parent 49d66af commit c033df3218e0fbf8f38a950793f6d58082531f21 @k-halaburda k-halaburda committed Aug 9, 2013
Showing with 9 additions and 82 deletions.
  1. +0 −79 app/Config/database.php.default
  2. +9 −3 lib/Cake/Model/Datasource/DboSource.php
@@ -1,79 +0,0 @@
-<?php
-/**
- * This is core configuration file.
- *
- * Use it to configure core behaviour of Cake.
- *
- * PHP 5
- *
- * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
- * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- *
- * Licensed under The MIT License
- * For full copyright and license information, please see the LICENSE.txt
- * Redistributions of files must retain the above copyright notice.
- *
- * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
- * @link http://cakephp.org CakePHP(tm) Project
- * @package app.Config
- * @since CakePHP(tm) v 0.2.9
- * @license http://www.opensource.org/licenses/mit-license.php MIT License
- *
- * Database configuration class.
- * You can specify multiple configurations for production, development and testing.
- *
- * datasource => The name of a supported datasource; valid options are as follows:
- * Database/Mysql - MySQL 4 & 5,
- * Database/Sqlite - SQLite (PHP5 only),
- * Database/Postgres - PostgreSQL 7 and higher,
- * Database/Sqlserver - Microsoft SQL Server 2005 and higher
- *
- * You can add custom database datasources (or override existing datasources) by adding the
- * appropriate file to app/Model/Datasource/Database. Datasources should be named 'MyDatasource.php',
- *
- *
- * persistent => true / false
- * Determines whether or not the database should use a persistent connection
- *
- * host =>
- * the host you connect to the database. To add a socket or port number, use 'port' => #
- *
- * prefix =>
- * Uses the given prefix for all the tables in this database. This setting can be overridden
- * on a per-table basis with the Model::$tablePrefix property.
- *
- * schema =>
- * For Postgres/Sqlserver specifies which schema you would like to use the tables in. Postgres defaults to 'public'. For Sqlserver, it defaults to empty and use
- * the connected user's default schema (typically 'dbo').
- *
- * encoding =>
- * For MySQL, Postgres specifies the character encoding to use when connecting to the
- * database. Uses database default not specified.
- *
- * unix_socket =>
- * For MySQL to connect via socket specify the `unix_socket` parameter instead of `host` and `port`
- */
-class DATABASE_CONFIG {
-
- public $default = array(
- 'datasource' => 'Database/Mysql',
- 'persistent' => false,
- 'host' => 'localhost',
- 'login' => 'user',
- 'password' => 'password',
- 'database' => 'database_name',
- 'prefix' => '',
- //'encoding' => 'utf8',
- );
-
- public $test = array(
- 'datasource' => 'Database/Mysql',
- 'persistent' => false,
- 'host' => 'localhost',
- 'login' => 'user',
- 'password' => 'password',
- 'database' => 'test_database_name',
- 'prefix' => '',
- //'encoding' => 'utf8',
- );
-}
@@ -1112,7 +1112,7 @@ public function read(Model $model, $queryData = array(), $recursive = null) {
$db->queryAssociation($model, $linkModel, $type, $assoc, $assocData, $array, true, $resultSet, $model->recursive - 1, $stack);
unset($db);
- if ($type === 'hasMany') {
+ if ($type === 'hasMany' || $type === 'hasAndBelongsToMany') {
$filtered[] = $assoc;
}
}
@@ -1138,7 +1138,10 @@ public function read(Model $model, $queryData = array(), $recursive = null) {
* @return array Array of results that have been filtered through $model->afterFind
*/
protected function _filterResults(&$results, Model $model, $filtered = array()) {
- $current = reset($results);
+ if (!is_array($results)) {
+ return array();
+ }
+ $current = reset($results);
if (!is_array($current)) {
return array();
}
@@ -1252,6 +1255,9 @@ public function queryAssociation(Model $model, &$linkModel, $type, $association,
} else {
$fetch = null;
}
+ if ($queryData['callbacks'] === true || $queryData['callbacks'] === 'after') {
+ $this->_filterResults($fetch, $model);
+ }
}
$modelAlias = $model->alias;
@@ -1312,7 +1318,7 @@ public function queryAssociation(Model $model, &$linkModel, $type, $association,
} else {
$this->_mergeAssociation($row, $fetch, $association, $type, $selfJoin);
}
- if (isset($row[$association])) {
+ if (isset($row[$association]) && $type !== 'hasAndBelongsToMany') {
$row[$association] = $linkModel->afterFind($row[$association], false);
}
} else {

0 comments on commit c033df3

Please sign in to comment.