DeSharky  
          
              
                April 1, 2013,  7:16pm
               
              1 
           
         
        
          Начал изучать Yii, встала такая проблема:
есть 2 таблицы contragents (id,…) и tickets (…,id_contragent,…)
Так вот как мне при создании новой заявки (tickets) внедрить селектбокс из contragents?
Читал http://www.yiiframework.com/doc/guide/1.1/ru/database.arr  - вроде не сложно,а начал проводить аналогии со своим проектом - ничего не выходит.
Попробовал написать во вьшку tickets такой код:
$Contragents = Contragents::model()->findAll();
echo CHtml::activedropDownList($model, 'id', $Contragents); 
Как правильно написать?
         
        
           
         
            
       
      
        
          
          
            tuschkan  
          
              
                April 2, 2013,  7:18am
               
              2 
           
         
        
          
Сделайте так:
echo CHtml::activedropDownList($model, 'id', CHtml::listData(Contragents::model()->findAll(), 'id', 'title'));
 
        
           
         
            
       
      
        
          
          
            Q-Zma  
          
              
                April 2, 2013,  7:45am
               
              3 
           
         
        
          [size=2]
 tuschkan:
 
[/size]
Сделайте так:
echo CHtml::activedropDownList($model, 'id', CHtml::listData(Contragents::model()->findAll(), 'id', 'title'));
 
 
Не учите человека плохому, данные нужно подготавливать в контроллере[size=2].[/size]
         
        
           
         
            
       
      
        
          
          
            tuschkan  
          
              
                April 2, 2013,  8:20am
               
              4 
           
         
        
          
Лучше в модели, а в контроллере на худой конец.
Это простейшая выборка и не критично, если она будет в представлении. Не смотря на то, что в MVC BEST practice сказано, что view should avoid containing code that performs explicit DB queries. Such code is better placed in models,
Larry Ulman пишет:
To create a drop-down associated with another Model, you’d replace that code with:
<?php echo $form->dropDownList($model,'departmentId', CHtml::listData(Department::model()->findAll(), 'id', 'name')); ?>
оригинал: http://www.larryullman.com/2009/11/12/basic-view-edits-in-yii/ 
Вот тут в обсуждении принимают участие qiangxue и mdomba и тут везде в примерах такая выборка используется.
         
        
           
         
            
       
      
        
          
          
            DeSharky  
          
              
                April 2, 2013,  4:38pm
               
              5 
           
         
        
          подсказали такой вариант:
$Contragents = Contragents::model()->findAll();
$list = CHtml::listData($Contragents,
            'id', 'поле таблицы которое надо выводить'); 
echo CHtml::activedropDownList($model, ‘id’, $list);
все гуд, только как тогда выводить несколько полей? к примеру у меня имя и фамилия в разных полях, а вывести нужно оба
         
        
           
         
            
       
      
        
          
          
            tuschkan  
          
              
                April 2, 2013,  6:09pm
               
              6 
           
         
        
          
 DeSharky:
 
подсказали такой вариант:
$Contragents = Contragents::model()->findAll();
$list = CHtml::listData($Contragents,
            'id', 'поле таблицы которое надо выводить'); 
echo CHtml::activedropDownList($model, ‘id’, $list);
все гуд, только как тогда выводить несколько полей? к примеру у меня имя и фамилия в разных полях, а вывести нужно оба
 
 
Вы можете создать динамическое свойство. Тут описан как раз ваш случай http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/ 
         
        
           
         
            
       
      
        
          
          
            DeSharky  
          
              
                April 2, 2013,  7:53pm
               
              7 
           
         
        
          
О,спасибо,получилось!
Теперь при попытке добавить запись пишет "Контрагент cannot be blank."
Направьте в нужное русло пожалуйста
         
        
           
         
            
       
      
        
          
          
            tuschkan  
          
              
                April 3, 2013,  6:25am
               
              8 
           
         
        
          
Значит это свойство записано в модели в методе rules как required
	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			//array('field', 'required'),
...
),
		);
	}
 
        
           
         
            
       
      
        
          
          
            DeSharky  
          
              
                April 3, 2013,  5:13pm
               
              9 
           
         
        
          не,это понятно,оно и должно быть обязательным,я его заполняю…но приложение считает иначе