Name Istead Of Id With

I have 4 tables:

[list=1]

[*]User

[*]Pupil

[*]PupilHasUser

[*]PupilGroup

[/list]

I want to display all info in PupilHasUser. Now I don’t know how should i preview name of pupil group in PupilHasUser view.

Pupil model:


public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

                        'pupilGroupPupilGroup' => array(self::BELONGS_TO, 'PupilGroup', 'pupil_group_pupilGroupId'),

			

			'pupilHasUsers' => array(self::HAS_MANY, 'PupilHasUser', 'pupil_pupilId'),

		);

	}

Pupil group model:


public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'pupils' => array(self::HAS_MANY, 'Pupil', 'pupil_group_pupilGroupId'),

                        

		);

	}

PupilHasUser model:


public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'pupilPupil' => array(self::BELONGS_TO, 'Pupil', 'pupil_pupilId'),

                        

			'userUser' => array(self::BELONGS_TO, 'User', 'user_userId'),


                        'PupilGroup'=>array(self::HAS_ONE,'PupilGroup',array('pupil_group_pupilGroupId'=>'pupilGroupId'),'through'=>'pupilPupil'),

		);

	}

PupilHasUser view.php:


<div class="flash-notice">Dane ucznia.</div>

<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

                array(

                    'name'=>'pupilPupil.fullname',),              

                array(

                    'name'=>'pupilPupil.status',),              

                array(

                    'name'=>'pupilPupil.genre',),

                array(

                    'name'=>'pupilPupil.birth_date',),

                array(

                    'name'=>'pupilPupil.start_time',),

                array(

                    'name'=>'pupilPupil.end_time',),

                array(

                    'name'=>'pupilPupil.pupil_group_pupilGroupId',),

                    'PupilGroup.pupilGroupTitle',

)); ?>

I can get attributeLabels() from PupilGroup but not the value.(Not set)

Hi,

i think you want to write a with query on model

please see this link…

http://www.yiiframework.com/doc/guide/1.1/en/database.arr

i am not sure but i hope it’s solved


<?php 

$ninja = $model->pupil_pupilId;   

$criteria=new CDbCriteria;

$criteria->addCondition("pupilId = $ninja");

$group=  Pupil::model()->findAll($criteria);

$good_data = array();

           foreach($group AS $user)

                {

                    $good_data[$user->pupilId] = $user->pupil_group_pupilGroupId;                                   

                }

(int)$good_data = implode(',',$good_data);

//echo $good_data;

$id = $good_data;

$hey = PupilGroup::model()->findByPk((int)$id);

echo $hey->pupilGroupTitle;

?>

and in CDetailView:


array(

                    'name'=>'pupilPupil.pupil_group_pupilGroupId',

                    'value'=>$hey->pupilGroupTitle,

),

And Voilà! In PupilHasUser I get Pupil values and PupilGroup proper names.

i think you should apply the wrong way…

please refer this how to create the custom admin on yii

http://www.yiiplayground.com/index.php?r=UiModule/dataview/gridView

hope it’s help…

try using this example

if you want to show the join record on admingridview…

1) create the function on your controller


public function actionIndex() {

        if ((isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == true) || (isset($_REQUEST['id_page']) && !empty($_REQUEST['id_page']))) {

            Yii::app()->clientScript->scriptMap['*.js'] = false;

        }

        $model = new VenueArtist();

        $data_arr = $model->LoadAllArtist();

        $arrayDataProvider = new CArrayDataProvider($data_arr, array('id' => 'id',

            'pagination' => array('pageSize' => 10),

        ));

        $type = -1;

        $params = array(

            'arrayDataProvider' => $arrayDataProvider,

            'vid' => $_REQUEST['vid'],

            'status' => $type,

        );

        $this->renderPartial('artist_list', $params, false, true);

    }

2) In my model i will write a function




public function LoadAllArtist() {

		$criteria = new CDbCriteria;

		$criteria->select = 't.id,t.artist_name,t.email,t.contact_number,t.status, tm.music_name ';

		$criteria->join = 'LEFT JOIN rk_venue_music as tm on tm.id = t.rk_venue_music_id';

		$criteria->addCondition("t.status='1' OR t.status='0' OR t.status='3'");

		$criteria->addCondition('t.rk_venue_id="' . $_GET['vid'] . '"');

		$resultSet = VenueArtist::model()->findAll($criteria);

		//p($resultSet);

		$i = 1;

		$data_arr = array();

		foreach ($resultSet as $data) {

			//p($data->attributes);

			$imageemail = Yii::app()->request->baseUrl . '/images/email.gif';

			$imagecontact = Yii::app()->request->baseUrl . '/images/contact.png';

			$email = "<img style='margin-bottom:-3px' src='" . $imageemail . "'> " . $data->email;

			$contact = "<img style='margin-bottom:-4px' src='" . $imagecontact . "'> " . $data->contact_number;

			$data_arr[] = array(

                'counter' => $i++,

                'id' => $data->id,

                'artist_name' => $data->artist_name,

                'music_name' => $data->music_name,

                'email' => $email,

                'event_name' => $data->event_name,

                'rk_venue_artist_id' => $data->rk_venue_artist_id,

                'contact_number' => $contact,

                'status' => $data->status,

			//'Action'=>'',

			);

		}


		return $data_arr;

	}

3) Display the gridview…like


 <?php $this->widget('zii.widgets.grid.CGridView', array(

                'id' => 'artist-grid',

                'itemsCssClass' => 'manage_table',

                'dataProvider' => $arrayDataProvider,

                //'afterAjaxUpdate'=> 'updateChild',  

                'pager' => array('id' => rand(0, 999999)),

                'columns' => array(

                    array(

                        'name' => 'ID',

                        'value' => 'CHtml::encode($data["counter"])',

                        'htmlOptions' => array('width' => '25px')

                    ),

                    array(

                        'name' => 'Artist Name',

                        'type' => 'raw',

                        'value' => 'CHtml::encode($data["artist_name"])',

                        'htmlOptions' => array('width' => '125px')

                    ),

                    array(

                        'name' => 'Genres',

                        'type' => 'raw',

                        'value' => 'CHtml::encode($data["music_name"])',

                        'htmlOptions' => array('width' => '125px')

                    ),

                    /* array(

                      'name' => 'Associated Events',

                      'type' => 'raw',

                      'value' => 'CHtml::tag("div",  array("style"=>"text-align: center;cursor:pointer" ,"onclick"=>"setchanges({$data["id"]})","id" => "{$data["id"]}","href"=>"javascript:void(0);") ,

                      CHtml::tag("img", array( "src" => "'.Yii::app()->request->baseUrl . '/images/images.jp"))

                      )',

                      ), */

                    array(

                        'name' => 'View Associated Events',

                        'type' => 'raw',

                        'value' => 'CHtml::link("<span class=\'gridblue\'>View Associated Events</span>","javascript:void(0);",array("onclick"=>"setchanges({$data["id"]})"))',

                        'htmlOptions' => array('width' => '160px')

                    ),

                    array(

                        'name' => 'Details',

                        'type' => 'raw',

                        'value' => '"<div class=\'text_left  margin_l20\'>" . $data["email"]." <br /> ".$data["contact_number"]. "</div>"',

                        'htmlOptions' => array('width' => '225px')

                    ),

                   

                ),

            ));

            ?>

i hope it may be some help…