Yii Framework Forum: Вопрос по работе с AR - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Вопрос по работе с AR Rate Topic: -----

#1 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 31 March 2009 - 01:36 AM

в модели Items объявляю relations:
public function relations()
{
        return array(
'category'=>array(self::MANY_MANY, 'Category', 'ItemCategory(itemid, categoryid)'),
        );
}


в контроллере делаю выборку:


$criteria=new CDbCriteria;
$criteria->order='item.createTime DESC';
$itemList=Item::model()->with(array('category'=>array(
                                            'select'=>'id, name'
                                        ),
                                  ))->together()->findAll($criteria);


в просмотре (view) перебираю $itemList :

<?php foreach($itemList as $n=>$model): ?>
<?php echo CHtml::encode($model->id); ?>
...
<?php endforeach; ?>


не соображу как мне во view вывести category->name
0

#2 User is offline   rosko 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 211
  • Joined: 04-January 09
  • Location:Kiev, Ukraine

Posted 31 March 2009 - 01:46 AM

$model->category->name
0

#3 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 31 March 2009 - 01:54 AM

Quote

$model->category->name


почему-то нет  :-[
ничего не выводит, хотя print_r ($model->category) выводит информацию об объекте Category и там есть
[_attributes:private] => Array
                (
                    [id] => 2
                    [name] => Категория 1
                )

0

#4 User is offline   rosko 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 211
  • Joined: 04-January 09
  • Location:Kiev, Ukraine

Posted 31 March 2009 - 02:37 AM

хм-м.. странно..

тогда попробуй
$model->category['name']
0

#5 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 31 March 2009 - 05:55 AM

скорее всего косяк в том, что $model->category является масивом (поскольку у тебя many to many), попробуй $model->category[0]->name.
или же делай цикл
0

#6 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 31 March 2009 - 06:01 AM

Quote

скорее всего косяк в том, что $model->category является масивом (поскольку у тебя many to many), попробуй $model->category[0]->name.

или же делай цикл


точно! возвращает массив, который надо перебрать для вывода всех категорий.

спасибо!
0

#7 User is offline   Digital God 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 178
  • Joined: 30-January 09

Posted 31 March 2009 - 06:04 AM

Лучше всего в модели Items сделай чего-нить типа такого


public function getPostCategories()
{
    $links = array();
    $cats = $this->categoryCache ? unserialize($this->categoryCache) : $this->category;
    foreach($cats as $cat)
        $links[] = CHtml::link(CHtml::encode($cat->name),array('news/category','category'=>$cat->altname));
    return implode(', ',$links);
}

0

#8 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 31 March 2009 - 07:40 AM

Ага, спасибо.
Нужно только имена категорий сделал по аналогии:

	public function getItemCategoryNames()
    {
      $_categories = array();
      foreach($this->category as $cat)
          $_categories[] = $cat->name;
      return implode(', ',$_categories);
  }

0

#9 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 02 April 2009 - 08:50 AM

Вдогонку вопрос:
А как в форме сделать редактирование этого самого мультивыбора?


<?php echo CHtml::activeLabelEx($item,Item::model()->attributeLabels['category']); ?>
<?php echo CHtml::activeDropDownList($item->category, 'id', CHtml::listData( Category::model()->findAll(), 'id', 'name' ), array('multiple'=>'multiple')); ?>


вывод ошибки, что $item->category не модель, но это понятно, там массив...

$item->category[0] или $item->category[1] selected в дропдоунлисте ставится по одному значению соответственно, а как сделать, чтобы все значения выставлялись?


0

#10 User is offline   duke1999 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 57
  • Joined: 01-March 09
  • Location:Russia

Posted 03 April 2009 - 04:22 AM

Отвечу сам себе, основываясь на этом ответе:
http://www.yiiframew...36.html#msg5636

в загрузке loadItem прописал
$this->_item=Item::model()->with('category')->findbyPk($id!==null ? $id : $_GET['id']);
$_categories = array();
foreach ($this->_item->categories as $i=>$cat) {
$_categories[] = $cat['id'];
}
$this->_item->category = $_categories;


в форме:

$htmlOptions['multiple'] = true;
$htmlOptions['name'] = get_class($item).'[category]'.'[]';
echo CHtml::activeDropDownList($item, "category", CHtml::listData( Category::model()->findAll(), 'id', 'name' ), $htmlOptions);

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users