Browse Source

First steps towards supporting translatable belongsTo associations

Jose Lorenzo Rodriguez 12 years ago
parent
commit
7d397bc0ba

+ 3 - 2
src/Model/Behavior/TranslateBehavior.php

@@ -89,7 +89,7 @@ class TranslateBehavior extends Behavior {
 	public function setupFieldAssociations($fields) {
 		$alias = $this->_table->alias();
 		foreach ($fields as $field) {
-			$name = $field . '_translation';
+			$name = $this->_table->alias() . '_' . $field . '_translation';
 			$target = TableRegistry::get($name);
 			$target->table('i18n');
 
@@ -137,8 +137,9 @@ class TranslateBehavior extends Behavior {
 
 		$contain = [];
 		$fields = $this->config()['fields'];
+		$alias = $this->_table->alias();
 		foreach ($fields as $field) {
-			$contain[$field . '_translation'] = $conditions;
+			$contain[$alias . '_' . $field . '_translation'] = $conditions;
 		}
 
 		$query->contain($contain);

+ 1 - 1
src/ORM/Association.php

@@ -412,7 +412,7 @@ abstract class Association {
 		if (!empty($options['queryBuilder'])) {
 			$newQuery = $options['queryBuilder']($target->query());
 			$options['fields'] = $newQuery->clause('select') ?: $options['fields'];
-			$options['conditions']->add($newQuery->clause('where'));
+			$options['conditions']->add($newQuery->clause('where') ?: []);
 		}
 
 		$joinOptions = ['table' => 1, 'conditions' => 1, 'type' => 1];

+ 18 - 1
tests/TestCase/Model/Behavior/TranslateBehaviorTest.php

@@ -34,7 +34,8 @@ class TranslateBehaviorTest extends TestCase {
 	public $fixtures = [
 		'core.translate',
 		'core.article',
-		'core.comment'
+		'core.comment',
+		'core.author'
 	];
 
 	public function tearDown() {
@@ -393,4 +394,20 @@ class TranslateBehaviorTest extends TestCase {
 		$this->assertEquals('Obsah #1', $results->first()->body);
 	}
 
+	public function testFindSingleLocaleBelongsto() {
+		$table = TableRegistry::get('Articles');
+		$table->addBehavior('Translate', ['fields' => ['title', 'body']]);
+		$authors = $table->belongsTo('Authors')->target();
+		$authors->addBehavior('Translate', ['fields' => ['name']]);
+
+		$table->locale('eng');
+		$authors->locale('eng');
+
+		$results = $table->find()->contain(['Authors' => function($q) {
+			return $q->select(['id', 'name']);
+		}]);
+
+		debug(json_encode($results->first()->author));
+	}
+
 }