Как создать мультимодель CGridView - PullRequest
1 голос
/ 16 декабря 2011

Как создать мультимодельный CGridView в фреймворке Yii.Я искал документацию Yii.

Ниже приведены две таблицы для примера того, что мне нужно

Таблица: user_master

+---------+----------+-------------+-------------+
| user_id | name     | email       | active      |  
|   1     | Darshit  | abc@xyz.com | true        |  
|   2     | Obed     | abc@xyz.com | true        |  
|   3     | abmed    | abc@xyz.com | true        |  
|   4     | clutch   | abc@xyz.com | true        |  
|   5     | sirisb   | abc@xyz.com | true        |  
+---------+----------+-------------+-------------+

Таблица: friend_master

+---------+-----------+--------------+-------------+  
| user_id | friend_id | date_created | is_deleted  |  
+---------+-----------+--------------+-------------+    
|   1     |    2      | 2011-12-14   | false       |  
|   1     |    5      | 2011-12-14   | false       |  
|   3     |    5      | 2011-12-14   | false       |  
|   2     |    4      | 2011-12-14   | false       |  
|   1     |    3      | 2011-12-14   | false       |  
|   5     |    2      | 2011-12-14   | false       |  
+---------+-----------+--------------+-------------+  

Мне нужна сетка, подобная этой:

Desired Result

Я создал и модели обеих таблиц, но они отображают только один вид сетки модели.

Итак, я не понимаю, как это сделать.Любая помощь будет весьма заметна.

1 Ответ

4 голосов
/ 17 декабря 2011

Похоже, вам не нужно многомодельное gridview.Сетка, которую вы предоставляете по мере необходимости, отображает элементы только одной модели, user_master.Свойство «Друзья» фактически принадлежит этой модели, потому что это значение относится к каждому конкретному экземпляру таблицы user_master.Таким образом, вы можете представить свойство «Друзья» как дополнительный столбец в таблице user_master.Вам не нужно добавлять эту строку в таблицу, просто чтобы объявить ее свойством в модели.Добавьте следующую строку в массив, возвращаемый функцией 'Relations' модели user_master:

'FriendsCount'=> array(self::STAT, 'friend_master', 'user_id'),

Подробнее о том, как это работает, можно прочитать здесь: http://www.yiiframework.com/doc/api/1.1/CActiveRecord/#relations-detail.

Вкратце объясним,тип отношений STAT просто извлекает статистические значения модели.В этом конкретном случае будет учитываться только количество друзей, связанных с каждым экземпляром модели user_master.

Теперь, внутри вашего определения CGridView, вы должны объявить 3 столбца, которые вы хотите отобразить.Это делается внутри массива столбцов.Конечно, user_id и name будут распознаваться как явно объявленные свойства отображаемой модели, поэтому нам не нужно о них заботиться.Но для столбца «Друзья» может потребоваться явно указать значение, которое мы хотим отобразить.Это делается просто с помощью массива:

<?php $this->widget('zii.widgets.grid.CGridView', array(
        ...
    ...
    'columns'=>array(
        'user_id',
        'name',
             array(
               'class'=>'CDataColumn',
           'name'=>'Friends',
           'value'=>'$data->FriendsCount',  //The FriendsCount relation we declared                              
             ),
    ),
)); 
?>

Вы можете заметить, что используя этот синтаксис на основе массива, вы можете объявить довольно универсальные столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...