Ошибка sfDoctrineMasterSlavePlugin и I18N «Неизвестный перевод псевдонима отношения» - PullRequest
0 голосов
/ 02 февраля 2012

Я работаю над приложением Symfony 1.4 и использую доктрину I18N. Для обеспечения гибкости я переношу архитектуру своей базы данных, чтобы у меня было 2 базы данных MySQL: 1 ведущая и 1 ведомая. Вот почему я решил использовать sfDoctrineMasterSlavePlugin, который кажется идеальным для этой новой конфигурации. К сожалению, теперь я получаю некоторые ошибки с I18N. Вот мой конфиг:

databases.yml

dev:
  master:
    class: sfDoctrineDatabase
    param:
      dsn:       mysql:host=localhost;dbname=my_db;
      username:  ****
      password:  ****

  slave:
    class: sfDoctrineDatabase
    param:
      dsn:       mysql:host=localhost;dbname=my_db;
      username:  ****
      password:  ****

schema.yml

Data:
  actAs:
    I18n:
      fields: [name]
  columns:
    name: { type: string(255) }

В моем шаблоне

<?php echo $data->getName(); ?>

Я получаю эту ошибку

Unknown relation alias Translation

Я не могу найти причин, по которым это отношение не будет работать должным образом! ... Я обнаружил, что некоторые люди получают ту же ошибку, но не нашли никакого решения ...

У кого-нибудь есть идея?

1 Ответ

1 голос
/ 19 марта 2012

Я наконец-то нашел решение благодаря Джо Сипонену из http://www.doctrine -project.org / jira / browse / DC-363 (объяснения см. В сообщении)

В lib / vendor / symfony / lib / plugins / sfDoctrinePlugin / lib / vendor / doctrine / Doctrine / Record / Generator.php:

abstract class Doctrine_Record_Generator extends Doctrine_Record_Abstract
{
    protected static $lastConnectionHash = null;

    /* ... */

    public function initialize(Doctrine_Table $table)
    {
        if ($this->_initialized) {
            return false;
        }

        $this->_initialized = true;

        $this->initOptions();

        $table->addGenerator($this, get_class($this));

        $this->_options['table'] = $table;

        $ownerClassName = $this->_options['table']->getComponentName();
        $className = $this->_options['className'];
        $this->_options['className'] = str_replace('%CLASS%', $ownerClassName, $className);

        if (isset($this->_options['tableName'])) {
            $ownerTableName = $this->_options['table']->getTableName();
            $tableName = $this->_options['tableName'];
            $this->_options['tableName'] = str_replace('%TABLE%', $ownerTableName, $tableName);
        }

        // check that class doesn't exist (otherwise we cannot create it)
        if ($this->_options['generateFiles'] === false && class_exists($this->_options['className'])) {
            $this->_table = Doctrine_Core::getTable($this->_options['className']);
            return false;
        }

        $currentConnectionHash = spl_object_hash($table->getConnection()->getDbh());

        if ($currentConnectionHash != self::$lastConnectionHash)
        {
            self::$lastConnectionHash = $currentConnectionHash;

            $this->buildTable();

            $fk = $this->buildForeignKeys($this->_options['table']);

            $this->_table->setColumns($fk);

            $this->buildRelation();

            $this->setTableDefinition();
            $this->setUp();

            $this->generateClassFromTable($this->_table);

            $this->buildChildDefinitions();

            $this->_table->initIdentifier();
        }
    }


    /* ... */

}
...