Quantcast
Channel: Yii Framework Forum
Viewing all articles
Browse latest Browse all 18717

How To Update Specific Columns Of Table From Other Controller Actioncreate?

$
0
0
Hi All,
I have a tbl_scaffold with columns status_id and inspection_date that I want to be updated from InspectionController actionCreate.

The reason I want the 2 columns of tbl_scaffold to be updated as soon as I create a new inspection is because I don't want to change it manually since the next inspection due (inspection_date) must be changed after a new inspection was created and the status (status_id) must be the same with the result of last inspection.

 /**
	 * @var private property containing the associated Scaffold model instance.
	 */
	private $_scaffold = null; 

/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Inspection;
                $model->scaffold_id = $this->_scaffold->id;
                
		// Uncomment the following line if AJAX validation is needed
		 //$this->performAjaxValidation($model);

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

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


The tbl_inspection has also column status_id but inspection_date is declared as public on Inspection model

class Inspection extends ScaffRegActiveRecord
{
    public $inspection_date;


and included on Inspection view/_form as date picker

<?php
/* @var $this InspectionController */
/* @var $model Inspection */
/* @var $form CActiveForm */
?>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
	'id'=>'inspection-form',
	'enableAjaxValidation'=>false,
)); ?>

	<p class="note">Fields with <span class="required">*</span> are required.</p>

	<?php echo $form->errorSummary($model); ?>
	<div class="row">
		<?php echo $form->labelEx($model,'status_id'); ?>
		<?php echo $form->dropDownList($model,'status_id', $model->getStatusOptions(), array('prompt'=>'Select Status')); ?>
		<?php echo $form->error($model,'status_id'); ?>
	</div>

        <div class="row">
		<?php echo $form->labelEx($model,'inspection_date'); ?>
		<?php $this->widget('zii.widgets.jui.CJuiDatePicker',
                    array(
                    'attribute' => 'inspection_date',
                    'model'=>$model,
                    'options'=> array(
                    'dateFormat' =>'yy-mm-dd',
                    'altFormat' =>'yy-mm-dd',
                    'changeMonth' => true,
                    'changeYear' => true,
                    'showAnim' => 'slide',
                    'appendText' => '',
                    ),
                    ));
                    ?>
		<?php echo $form->error($model,'inspection_date'); ?>
	</div>
       	<div class="row buttons">
		<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
	</div>

<?php $this->endWidget(); ?>

</div>&lt!-- form -->


The inspection is under ScaffoldContext

/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
                        'scaffoldContext + create index admin', //check to ensure valid project context
			//'postOnly + delete', // we only allow deletion via POST request
		);
	}

/**
	 * In-class defined filter method, configured for use in the above filters() method
	 * It is called before the actionCreate() action method is run in order to ensure a proper scaffold context
	 */
	public function filterScaffoldContext($filterChain)
	{   
		//set the scaffold identifier based on either the GET input 
	    //request variables   
		if(isset($_GET['pid']))
			$this->loadScaffold($_GET['pid']);   
		else
			throw new CHttpException(403,'Must specify a scaffold before performing this action.');
			
		//complete the running of other filters and execute the requested action
		$filterChain->run(); 
	}


and can only create an inspection while a valid Scaffold context is open in view.php (CDetailView)

<?php
/* @var $this ScaffoldController */
/* @var $model Scaffold */

$this->breadcrumbs=array(
	'Scaffolds'=>array('index'),
	$model->id,
);

$this->menu=array(
	array('label'=>'List Scaffold', 'url'=>array('index')),
	array('label'=>'Create Scaffold', 'url'=>array('create')),
	array('label'=>'Update Scaffold', 'url'=>array('update', 'id'=>$model->id)),
	array('label'=>'Delete Scaffold', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->id),'confirm'=>'Are you sure you want to delete this item?')),
	array('label'=>'Manage Scaffold', 'url'=>array('admin')),
        array('label'=>'Create Inspection', 'url'=>array('inspection/create', 'pid'=>$model->id)),
);
?>

<h1>View Scaffold #<?php echo $model->id; ?></h1>

<?php $this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
                //'id',
		array(        
                    'name' => 'status_id',
                    'value' => CHtml::encode($model->getStatusText())
		),
		'inspection_date',        
	),
)); ?>

<br />
<h1>Scaffold Inspections</h1>

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


Note:
I removed the other columns of tbl_scaffold and tbl_inspection to shortened the codes.

I'm sure this is possible with Yii but I don't know how to do it, please help me.

Viewing all articles
Browse latest Browse all 18717

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>