Me gustaría extender el comportamiento de i18n, para que se una automáticamente a la tabla de traducción, en cualquier tipo de consulta (DQL, relations, getTable).
Además, necesita definir el parámetro de idioma predeterminado, de modo que cuando realizo una consulta sin el conjunto de idiomas, vuelve al idioma predeterminado.
Nota: Estoy buscando un comportamiento generalizado, por lo que se aplica a todos los objetos del modelo i18n, no para escribir y anular para cada una de las clases.Doctrine 1.2 auto-join i18n?
Aquí se muestra un ejemplo:
mesa product
-> Identificación, category_id, precio ...
mesa product_translation
-> Identificación, lang, nombre, descripción ...
Con la solución actual cuando lo haga algo como esto: Doctrine_Core::getTable('Product')->findAll()
, obtiene todos los productos sin unir las traducciones.
Así, en el controlador de E tienen a valle bucle de todos los registros y volver a aplicar valores traducidos, con $product->name = $product->Translation['en']->name
me gustaría algo como esto:
Doctrine_Core::getTable('Product')->findAll()
debe obtener los valores acumulados a lang = 'es 'Doctrine_Core::getTable('Product)->findAll('en')
mismo que el anterior- también debe trabajar con las relaciones, así que por ejemplo si tengo un usuario clase que tiene muchos productos
$user->Products
debe devolver una colección con traducciones incluidas. - también algo así como
$user->Products('en')
debe devolver la colección para otros idiomas (no predeterminados) - funciones Magic también estaría bien (si es posible) ... algo así como
Doctrine_Core::getTable('Product')->getByCategoryAndLang(1,'en')
¿Alguien puede ayudar? Estoy mirando plantillas y comportamientos, creo que ese es el camino a seguir, pero no tengo ni idea de cómo implementar esto
EDIT: Veo que no hay mucho interés en esto, así que déjame intentarlo con un pregunta más simple ¿Cómo se obtienen generalmente los campos i18n a través de las relaciones? Por ejemplo, ¿cómo puedo llamar al $user->Products
y obtener los productos con traducciones cargadas?
Gracias, pero lo que está sugiriendo podría hacerse sin el DAO. Simplemente declare la clase ProductTable y agregue los métodos getXy que hacen la unión con Translation. De todos modos no resuelve el problema, porque todavía no puedo acceder a esos campos con $ product-> name, pero $ product-> Translation ['en'] -> name – ZolaKt
No puedes acceder a la propiedad 'name' directamente a través de' modelo de producto ya que no se describe en este modelo (y no está presente en la tabla db). Con mi método, obtiene todas las columnas en un objeto (dentro de Doctrine_Collection) y para UNA traducción concreta. Así que recorriendo '$ products = DAO :: get ('Some \ Namespace \ Product') -> getProducts (array ('lang' => 1));' de esta manera 'foreach ($ products as $ product) {. ..} 'Usted ** puede ** En mi humilde opinión,' $ product-> name'. ¿No puedes? – shadyyx
Hmm ... No creo que todavía pueda acceder, como dijo que no se describe en modal. Lo que podría hacer es hidratarlo como matriz y reorganizar los resultados (eliminar la traducción y propagar el nombre de un nivel). Esto es lo que estoy usando ahora. Pero aún así, no puedo ver ninguna diferencia en su método en comparación con los métodos de definición normales en las clases de tabla – ZolaKt