2012-11-01 2 views
1

가 여기에 Form.Class 내 위젯의 경우 값으로 선택 array_keys를 저장하는 방법 : 저장되어있는 값이에 연결되지 않은 있습니다여러 사실 같을 때 sfWidgetFormChoice를 사용

$this->widgetSchema['schools'] = new sfWidgetFormChoice(array(
    'choices'  => Doctrine_Core::getTable('school')->getUsersSchools($userId), 
    'renderer_class' => 'sfWidgetFormSelectDoubleList', 
    'renderer_options' => array(
     'label_unassociated' => 'Unassociated', 
     'label_associated' => 'Associated' 
    ))); 

잘 위의 작동하지만 위에서 언급 한 선택 목록. 검색된 배열의 ID를 값으로 저장해야합니다. 대신 검색된 목록은 시간순으로 표시되며 ID는 무시됩니다. 나는 당신의 질문을 이해하면

public function getUsersSchools($id){ 
      $q =Doctrine_Query::create() 
      ->select('id') 
      ->from('school') 
      ->where('user_id = ?', $id) 
      ->execute(); 
     return $q; 
    } 
+0

어떤 종류의 변수가 getUsersSchools를 반환합니까? ID의 배열, 컬렉션? – j0k

+0

나는 그것이 컬렉션이라고 생각한다. 질문을 표시하도록 내 질문을 업데이트했습니다. – Patrick

+0

사용중인 양식은 생성 된 양식이며 기본적으로'학교 '필드가 있습니다. – 1ed

답변

1

가 올바르게 관련된 학교 ID를 저장하고 싶습니다 :

다음은 schoolTable 쿼리입니다. 위젯 대신 sfWidgetFormDoctrineChoice 위젯을 사용하면 기본 키를 ID로 사용하므로 상자에서 그대로 사용할 수 있습니다. 당신이 적절한 스키마가있는 경우

$query = Doctrine_Core::getTable('school')->queryForSelect($userId); 
$this->setWidget('schools', new sfWidgetFormDoctrineChoice(array(
    'model' => 'school', 
    'query' => $query, 
    'multiple' => true, 
    'renderer_class' => 'sfWidgetFormSelectDoubleList', 
    'renderer_options' => array(
    'label_unassociated' => 'Unassociated', 
    'label_associated' => 'Associated' 
), 
))); 
$this->setValidator('schools', new sfValidatorDoctrineChoice(array(
    'model' => 'schoool', 
    'query' => $query, 
    'multiple' => true, 
))); 

// in SchoolTable class 
public function queryForSelect($userId) 
{ 
    return $this->createQuery('s') 
    ->andWhere('s.user_id = ?', $userId) 
    ; 
} 

은 그때부터해야 전류가 (제대로에서 생성 된 기준에 정의 됨) schools_list 필드가 다음 (나는 학교가 협회는 many-to-many해야 가정) 해당 필드를 렌더링 할 수 있도록 수정할 수 있습니다. sfWidgetFormSelectDoubleList :

+0

그게 다야. 고마워요. – Patrick

관련 문제