setBaseQuery не работает с задачами в Symfony

Я создаю задачу в Symfony с Doctrine. Я получаю все места для пакетного обновления определенного поля. Это должно быть сделано на двух языках. Я использую setBaseQuery(), чтобы СОЕДИНИТЬ запрос с нужным мне языком.

Если я делаю следующее в действии, это работает без проблем. Однако, если я сделаю это в задаче; это не работает, как ожидалось. Задача отлично выполняется два раза (один на английском и другой тоже на английском!).

Любые идеи о том, что я должен делать по-другому в задачах?

Благодарность!

$languages = array('es' => 'Spanish', 'en' => 'English');
foreach($languages as $lang => $value) {

  // get all the places
  $q = Doctrine::getTable('Place')
    ->createQuery('p')
    ->leftJoin('p.Translation ptr')
    ->addWhere('ptr.lang = ?', $lang);

  $treeObject = Doctrine::getTable('Place')->getTree();
  $rootColumnName = $treeObject->getAttribute ( 'rootColumnName' );
  $treeObject->setBaseQuery($q);

  // all the continents
  foreach ( $treeObject->fetchRoots() as $continent ) {
    $this->log(date("Y-m-d H:i:s").' '.$lang.' Continent '.$continent->title);
    ..
  }
}

person fesja    schedule 18.02.2010    source источник
comment
Какие есть версии symfony и Doctrine? Просто быть чистым.   -  person Andrei Dziahel    schedule 19.02.2010
comment
извините, я использую symfony 1.2.7 и доктрину 1.1.6   -  person fesja    schedule 19.02.2010


Ответы (2)


Чтобы получить доступ к базе данных в ваших задачах, вам нужно будет вызвать следующее в вашем методе execute() перед любыми другими вызовами базы данных:

$databaseManager = new sfDatabaseManager($this->configuration);

http://www.symfony-project.org/ book/1_2/16-Инструменты управления приложениями#chapter_16_sub_custom_tasks_new_in_symfonyexecute()1

person nortron    schedule 19.02.2010
comment
Я уже делаю это, а также $connection = $databaseManager-›getDatabase($options['connection'] ? $options['connection'] : null)-›getConnection(); - person fesja; 19.02.2010

поэтому решение, которое я нашел, это добавить $model->Translation[$lang]->title. Странно, потому что заголовок должен был быть загружен через setbasequery; но вроде нет.

// all the continents
foreach ( $treeObject->fetchRoots() as $continent ) {
  $this->log(date("Y-m-d H:i:s").' '.$lang.' Continent '.$continent->Translation[$lang]->title);
  ..
}

Обновить

Я получаю перевод, но $continent->save() не сохраняет изменения на испанском языке (однако сохраняет их на английском). Мне пришлось сделать ручной запрос в Doctrine:

$con = Doctrine_Manager::getInstance()->connection();
...
$con->execute("update model_translation set field='".$field."' where id='".$model->id."' and lang='".$lang."'");

теперь все работает...

person fesja    schedule 20.02.2010