Array to String Conversion Error

I setup a multimodelform but I’m getting an Array to String Conversion error. Not sure why.

Stack trace if anyone can point me in the right direction:


	


Array to string conversion

(D:\WAMP\www\yii-1.1.8.r3324\framework\db\CDbCommand.php:256)

Stack trace:

#0

D:\WAMP\www\yii-1.1.8.r3324\framework\db\schema\CDbCommandBuilder.php(98):

CDbCommandBuilder->bindValues()

#1 D:\WAMP\www\yii-1.1.8.r3324\framework\db\ar\CActiveRecord.php(1607):

CDbCommandBuilder->createFindCommand()

#2

D:\WAMP\www\yii-1.1.8.r3324\framework\validators\CUniqueValidator.php(97):

member->exists()

#3 D:\WAMP\www\yii-1.1.8.r3324\framework\validators\CValidator.php(192):

CUniqueValidator->validateAttribute()

#4 D:\WAMP\www\yii-1.1.8.r3324\framework\base\CModel.php(152):

CUniqueValidator->validate()

#5 D:\WAMP\www\yii-1.1.8.r3324\framework\db\ar\CActiveRecord.php(780):

member->validate()

#6

D:\WAMP\www\yii-1.1.8.r3324\APP\protected\controllers\memberController.php(97):

member->save()

#7 D:\WAMP\www\yii-1.1.8.r3324\framework\web\actions\CInlineAction.php(50):

memberController->actionCreate2()

#8 D:\WAMP\www\yii-1.1.8.r3324\framework\web\CController.php(300):

CInlineAction->runWithParams()

#9 D:\WAMP\www\yii-1.1.8.r3324\framework\web\filters\CFilterChain.php(134):

memberController->runAction()

#10 D:\WAMP\www\yii-1.1.8.r3324\framework\web\filters\CFilter.php(41):

CFilterChain->run()

#11 D:\WAMP\www\yii-1.1.8.r3324\framework\web\CController.php(1144):

CAccessControlFilter->filter()

#12

D:\WAMP\www\yii-1.1.8.r3324\framework\web\filters\CInlineFilter.php(59):

memberController->filterAccessControl()

#13

D:\WAMP\www\yii-1.1.8.r3324\framework\web\filters\CFilterChain.php(131):

CInlineFilter->filter()

#14 D:\WAMP\www\yii-1.1.8.r3324\framework\web\CController.php(283):

CFilterChain->run()

#15 D:\WAMP\www\yii-1.1.8.r3324\framework\web\CController.php(257):

memberController->runActionWithFilters()

#16 D:\WAMP\www\yii-1.1.8.r3324\framework\web\CWebApplication.php(277):

memberController->run()

#17 D:\WAMP\www\yii-1.1.8.r3324\framework\web\CWebApplication.php(136):

CWebApplication->runController()

#18 D:\WAMP\www\yii-1.1.8.r3324\framework\base\CApplication.php(158):

CWebApplication->processRequest()

#19 D:\WAMP\www\yii-1.1.8.r3324\APP\index.php(25): CWebApplication->run()

REQUEST_URI=/yii-1.1.8.r3324/APP/index.php/member/create2

The stack trace isn’t very useful in this situation. Please post your form code and the controller action

In line 256 in CDbCommandit says:




$this->_statement->bindValue($name,$value,$this->_connection->getPdoType(gettype($value)));



and I bet that $value is an array in your case which it should not be

Controller:


<?php


class memberController 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

            	);

    	}


    	/**

 		* 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('create','update','create2'),

                            	'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 member;


            	// Uncomment the following line if AJAX validation is needed

            	// $this->performAjaxValidation($model);


            	if(isset($_POST['member']))

            	{

                    	$model->attributes=$_POST['member'];

                    	if($model->save())

                            	$this->redirect(array('view','id'=>$model->id));

            	}


            	$this->render('create',array(

                    	'model'=>$model,

            	));

    	}

    	

    	public function actionCreate2()

{

    	Yii::import('ext.multimodelform.MultiModelForm');

 

    	$model = new member;

 

    	$member = new member;

    	$validatedMembers = array();  //ensure an empty array

 

    	if(isset($_POST['member']))

    	{

    	$model->attributes=$_POST['member'];

 

    	if( //validate detail before saving the master

            	MultiModelForm::validate($member,$validatedMembers,$deleteItems) &&

            	$model->save()

    	)

    	{

            	//the value for the foreign key 'groupid'

            	$masterValues = array ('groupid'=>$model->id);

            	if (MultiModelForm::save($member,$validatedMembers,$deleteMembers,$masterValues))

            	$this->redirect(array('view','id'=>$model->id));

            	}

    	}

 

    	$this->render('create2',array(

    	'model'=>$model,

    	//submit the member and validatedItems to the widget in the edit form

    	'member'=>$member,

    	'validatedMembers' => $validatedMembers,

    	));

}

    	

    	

  




    	/**

 		* 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);


            	// Uncomment the following line if AJAX validation is needed

            	// $this->performAjaxValidation($model);


            	if(isset($_POST['member']))

            	{

                    	$model->attributes=$_POST['member'];

                    	if($model->save())

                            	$this->redirect(array('view','id'=>$model->id));

            	}


            	$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)

    	{

            	if(Yii::app()->request->isPostRequest)

            	{

                    	// we only allow deletion via POST request

                    	$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'));

            	}

            	else

                    	throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');

    	}


    	/**

 		* Lists all models.

 		*/

public function actionIndex()

{

    	$criteria = new CDbCriteria();


    	if(isset($_GET['qs']))

    	{

    	$qs = $_GET['qs'];

    	$criteria->compare('name', $qs, true, 'OR');

 

    	}


    	$dataProvider=new CActiveDataProvider("member", array('criteria'=>$criteria));


    	$this->render('index',array(

    	'dataProvider'=>$dataProvider,

      	'pagination'=>false,

      	$dataProvider->pagination->pageSize=50000000,

      	'name'=>'ajax',

    	));

}


    	/**

 		* Manages all models.

 		*/

    	public function actionAdmin()

    	{

            	$model=new member('search');

            	$model->unsetAttributes();  // clear any default values

            	if(isset($_GET['member']))

                    	$model->attributes=$_GET['member'];


            	$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 the ID of the model to be loaded

 		*/

    	public function loadModel($id)

    	{

            	$model=member::model()->findByPk($id);

            	if($model===null)

                    	throw new CHttpException(404,'The requested page does not exist.');

            	return $model;

    	}


    	/**

 		* Performs the AJAX validation.

 		* @param CModel the model to be validated

 		*/

    	protected function performAjaxValidation($model)

    	{

            	if(isset($_POST['ajax']) && $_POST['ajax']==='service-member-form')

            	{

                    	echo CActiveForm::validate($model);

                    	Yii::app()->end();

            	}

    	}

}






Form (2)


<div class="form wide">

 

<?php $form=$this->beginWidget('CActiveForm', array(

    	'id'=>'bulk-form',

    	'enableAjaxValidation'=>true,

)); ?>

 

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

 

<?php

 

// see http://www.yiiframework.com/doc/guide/1.1/en/form.table

// Note: Can be a route to a config file too,

//   	or create a method 'getMultiModelForm()' in the member model

 

$memberFormConfig = array(

  	'elements'=>array(

    	'name'=>array(

        	'type'=>'text',

			'filter'=>'filter',

        	'maxlength'=>40,

	),

	  

    	'rankLevel'=>array(

        	'type'=>'text',

			'filter'=>'filter',

        	'maxlength'=>40,

   	

    	),

		'Tag'=>array(

        	'type'=>'text',

			'filter'=>'filter',

        	'maxlength'=>40,

   	

    	),

		'dept'=>array(

        	'type'=>'text',

			'filter'=>'filter',

        	'maxlength'=>40,

   	

    	),

		'dateTag'=>array(

        	'type'=>'text',

			'filter'=>'filter',

        	'maxlength'=>40,

   	

    	),

		'date'=>array(

        	'type'=>'text',

			'filter'=>'filter',

        	'maxlength'=>40,

     	

    	),

		

	));

 

$this->widget('ext.multimodelform.MultiModelForm',array(

    	'id' => 'id_member', //the unique widget id

    	'formConfig' => $memberFormConfig, //the form configuration array

    	'model' => $member, //instance of the form model

    	//if submitted not empty from the controller,

    	//the form will be rendered with validation errors

    	'validatedItems' => $validatedMembers,

 

    	//array of member instances loaded from db

    	'data' => $member->findAll('branchId=:branchId', array(':branchId'=>$model->id)),

	));

?>

 

<div class="row">

		<?php echo $form->labelEx($model,''); ?>

		<?php echo $form->hiddenField($model,'ip3',array('value'=>Yii::app()->request->userHostAddress,)); ?>

		

		

		<?php echo $form->labelEx($model,''); ?>

		<?php echo $form->hiddenField($model,'branchId',array('value'=>1,)); ?>

	

	</div> 

 

<div class="row buttons">

	<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>

</div>

 

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

 

</div><!-- form -->

I assume one of your unique validation rules in your member model isn’t configured properly. Take a look at that, you can’t use uniqueValidator with an array value. If that isn’t the case it most properly is an error caused by the extension. Then you should post in the extension forum as this doesn’t seem to be a Yii core problem

It probably is the extension because all the rules() work on the regular form. This is the only form that uses multimodel and the only one that gives error.

thanx for your nice sharing with us here