bonjour,

je souhaite stocker dans ma base de données une table qui correspond à mes menus, il y a une paternité et du multilangue.
j'ai donc rajouté les behavior nestedset et i18n pour tout simplifier.

j'ai le schéma suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Menu:
  tableName: menu
  actAs:
    NestedSet:
      hasManyRoots: true
      rootColumnName: root_id
    I18n:
      tableName: menu_translation
      fields:  [name_menu, is_activated]
  columns:
    name:         { type: string(255) }
    name_menu:    { type: string(255) }
    is_activated: { type: boolean, notnull: true, default: true }
le name est un nom de référence pour le listing dans le backoffice, le name_menu sera visible par l'utilisateur et est donc internationnalizé.

pour la gestion du nestedset dans le back office j'utilise la mise en place via Jquery (http://redotheoffice.com/?p=74, http://www.lexik.fr/sfblog/?p=135).

dans mon MenuForm.class.php j'ai donc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
public function configure()
  {
   unset($this['root_id'], $this['lft'], $this['rgt'], $this['level']);
    $this->widgetSchema['parent_id'] = new sfWidgetFormDoctrineChoice(array(
      'model' => 'menu',
      'add_empty' => '~ (object is at root level)',
      'order_by' => array('root_id, lft',''),
      'method' => 'getIndentedName'
      ));
    $this->validatorSchema['parent_id'] = new sfValidatorDoctrineChoice(array(
      'required' => false,
      'model' => 'Menu'
      ));
 
    $this->setDefault('parent_id', $this->object->getParentId());
    $this->widgetSchema->setLabel('parent_id', 'Child of');
 
    $this->embedI18n(array('en', 'fr'));
    $this->widgetSchema->setLabel('en', 'English');
    $this->widgetSchema->setLabel('fr', 'French');
 
  }
et là c'est le drame.
en voulant créer le widget parent_id, une requete est faite a la BDD avec un select name, name_menu, is_activated FROM MENU .... Or, les champs name_menu et is_activated ne sont pas dans cette table mais bien dans la table menu_translation (remember i18n). DONC ça plante en disant "column name_menu" doesn't exist..

bref j'ai testé plein de truc et , dans mon Menu.class.php , si je surcharge la method setTableDefinition en enlevant les champs qui posent pb, j'otbiens:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
public function setTableDefinition()
  {
      $this->setTableName('menu');
      $this->hasColumn('name', 'string', 255, array('type' => 'string', 'length' => '255'));
 
  }
là tout marche nickel (nestedset et i18n) SAUF quand je fais un doctrine:build_all_reload, mes champs name_menu et is_activated ne sont pas regénérés dans ma BDD, normal...

quelqu'un aurait-il une idée?