Yii Framework Forum: View.php Value Of Related Table - Yii Framework Forum

Jump to content

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

View.php Value Of Related Table Rate Topic: -----

#1 User is offline   andreasd 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 15-November 12
  • Location:Munich

Posted 04 May 2013 - 02:39 PM

Hello,

I have a view that shows the values of a table, but I have a related table and one value should be taken from that related table.
Currently the view shows fid_os of table server. But I need the reference of fid_os in table operatingsystem with the row os_name.

table operatingsystem with the cells id_os and os_name

here is my view view.php
<?php
/* @var $this ServerController */
/* @var $model Server */

$this->breadcrumbs=array(
	'Servers'=>array('index'),
	$model->id_server,
);

$this->menu=array(
	array('label'=>'Server anzeigen', 'url'=>array('index')),
	array('label'=>'Server erstellen', 'url'=>array('create')),
	array('label'=>'Server aktualisieren', 'url'=>array('update', 'id'=>$model->id_server)),
	array('label'=>'Server löschen', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->id_server),'confirm'=>'Sind Sie sicher das Sie diesen Server löschen wollen?')),
	array('label'=>'Server verwalten', 'url'=>array('admin')),
);
?>

<h1>Serveranzeige <?php echo $model->id_server; ?></h1>

<?php $this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
		'id_server',
		'fid_os',
		'is_virtual',
		'os_version',
		'backup',
	),
)); ?>


Here is my model Server.php
	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(
			'fidOs' => array(self::BELONGS_TO, 'Operatingsystem', 'fid_os'),
		);
	}


Here is my controler ServerController.php
<?php

class ServerController extends Controller
{
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column2';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('admin', 'create', 'delete', 'update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
		);
	}

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
	{
		$this->render('view',array(
			'model'=>$this->loadModel($id),
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Server;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Server']))
		{
			$model->attributes=$_POST['Server'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id_server));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);
                $model->convertToBooleans();

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Server']))
		{
			$model->attributes=$_POST['Server'];
			if($model->save())
				$this->redirect(array('view','id'=>$model->id_server));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}
        
      
	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		$this->loadModel($id)->delete();

		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
		if(!isset($_GET['ajax']))
			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Server');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Server('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Server']))
			$model->attributes=$_GET['Server'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer $id the ID of the model to be loaded
	 * @return Server the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id)
	{
		$model=Server::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param Server $model the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='server-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
}

Best regards / Mit freundlichen Grüßen
Andreas
0

#2 User is offline   andreasd 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 15-November 12
  • Location:Munich

Posted 07 May 2013 - 03:41 PM

I found the solution for the view.php file. It is the array('name'....

<?php $this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
		'id_server',
                array(
                    'name'=>'fid_os',
                        'value'=>isset($model->fidOs)?CHtml::encode($model->fidOs->os_name):"unknown"
                ),
                'is_virtual',
                'os_version',
		'backup',
	),
)); ?>


But now I found that I also need a similar solution for my _view.php that is called from index.php.
Instead of the value of fid_os I would like to get the value of os_name of the related table Operatingsystem.
Can please somebody help me?

_view.php
<?php
/* @var $this ServerController */
/* @var $data Server */
?>

<div class="view">
	<b><?php echo CHtml::encode($data->getAttributeLabel('fid_os')); ?>:</b>
	<?php echo CHtml::encode($data->fid_os); ?>
	<br />
</div>

Best regards / Mit freundlichen Grüßen
Andreas
0

#3 User is offline   yugene 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 488
  • Joined: 08-August 09
  • Location:World is Wide

Posted 08 May 2013 - 03:36 AM

Shouldn't it be the same?

isset($data->fidOs)?CHtml::encode($data->fidOs->os_name):"unknown"

Have you read Yii guide on AR relational queries?
0

#4 User is offline   andreasd 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 15-November 12
  • Location:Munich

Posted 09 May 2013 - 12:02 AM

Thank you the replay.

But it still does not work. The output is always unknown.

<b><?php echo CHtml::encode($data->getAttributeLabel('fid_os')); ?>:</b>
	<?php echo isset($model->fidOs)?CHtml::encode($model->fidOs->os_name):"unknown"; ?>
	<br />


I have read the documentation, but I don´t find the solution.
Best regards / Mit freundlichen Grüßen
Andreas
0

#5 User is offline   yugene 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 488
  • Joined: 08-August 09
  • Location:World is Wide

Posted 09 May 2013 - 04:54 AM

Do you have values filled in the db?
Did you try eager loading to check relation data is filled?
0

#6 User is offline   andreasd 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 15-November 12
  • Location:Munich

Posted 09 May 2013 - 06:14 AM

Yes, I have values in the database. My file view.php is working.

The file _view is read by the index.html file.
<?php
/* @var $this ServerController */
/* @var $dataProvider CActiveDataProvider */

$this->breadcrumbs=array(
	'Server',
);

$this->menu=array(
	array('label'=>'Server hinzufuegen', 'url'=>array('create')),
	array('label'=>'Server verwalten', 'url'=>array('admin')),
);
?>

<h1>Server</h1>

<?php $this->widget('zii.widgets.CListView', array(
	'dataProvider'=>$dataProvider,
	'itemView'=>'_view',
)); ?>

Best regards / Mit freundlichen Grüßen
Andreas
0

#7 User is offline   yugene 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 488
  • Joined: 08-August 09
  • Location:World is Wide

Posted 09 May 2013 - 06:23 AM

Please try to eagerly load $dataProvider with fidOs relation values.
0

#8 User is offline   andreasd 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 12
  • Joined: 15-November 12
  • Location:Munich

Posted 09 May 2013 - 06:28 AM

Thank you for your help.
I found the problem. I was using $model, but I need $data.

	<b><?php echo CHtml::encode($data->getAttributeLabel('fid_os')); ?>:</b>
	<?php echo isset($data->fidOs)?CHtml::encode($data->fidOs->os_name):"unknown"; ?>
	<br />

Best regards / Mit freundlichen Grüßen
Andreas
0

#9 User is offline   yugene 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 488
  • Joined: 08-August 09
  • Location:World is Wide

Posted 09 May 2013 - 07:23 AM

Great. Didn't put enough attention to your last example :)
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