Ayuda con cAdvancedArBehavior (MANY_MANY)

Saludos a la comunidad de Yii

Hace unos días me topé con un problema haciendo un proyecto con una relación many_many. En general siempre uso el esquema mas simple que es A(id), B(id) y la tabla relación C(a_id,b_id). Y uso la extensión advanced-behavior sin ningún problema. La situación que me trae hoy a pedir ayuda es que en este proyecto la tabla C debe guardar una 3ra columna que no son FK de A y B. Ejemplo

A(id)

B(id)

C(a_id, b_id, otro_valor)

En este caso quiero acceder a la variable (otro_valor) para asignarle un valor X.

Aquí pongo parte de mi código para que me ayuden o me orienten que necesito para acceder a ese 3er valor y poder almacenarlo y extraerlo.

Model Factura.php.




public function relations()

	{

	return array(

	'servicios' => array(self::MANY_MANY, 'Servicio', 'factura_servicio(id_factura,id_servicio)'),

		);

	}



Vista view.php de Factura (aquí es donde agrego el dropdown para agregar mis servicios a la factura)




<div class="form">

<?php echo CHtml::beginForm(); ?>


<div class="row">

	<?php echo CHtml::label('label', 'label'); ?>

	<?php echo CHtml::dropDownList('servicios','',CHtml::listData(Servicio::model()->findAll(), 'id', 'servicio')); ?>

	<?php echo CHtml::textField('cantidad','',array('size'=>50,'maxlength'=>50)); ?>

</div>


<?php echo CHtml::submitButton('Agregar',array('confirm'=>'Estas seguro de Agregar este Servicio')); ?>


<?php echo CHtml::endForm(); ?>



aquí envié 2 variables via Post a mi controller que son servicios(tabla con la que voy a relacionar many_many), cantidad(3ra columna que necesito guardar en la tabla factura_servicio).

Contoller FacturaController.php




public function actionView($id)

	{

		$model=$this->loadModel($id);

		

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

		{

	$model->servicios=$_POST['servicios'];

	$cantidad=$_POST['cantidad'];// aqui recivo la 3er variable que quiero almacenar pero no sé cómo hacerlo 

	

	if($model->afterSave('servicios')) 

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

		}

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

			'model'=>$this->loadModel($id),			

		));


	}



Hasta ahí todo funciona correctamente me hace la relación de la mi tabla Factura y mi tabla Servicio correctamente en la tabla relación Factura_Servicio pero no tengo la más mínima idea de cómo acceder a la tabla Factura_Servicio y agregarle el valor de la 3er columna. Creo que mi problema mayormente radica en la poca experiencia que tengo trabajando con esta extensión. He intentado agregar en vano con una consula Yii::app()->db->createCommand(‘mi consula sql’)->execute(); que busque donde se encuentra la relación y agregue el valor manualmente pero no me funciona. De antemano muchas gracias por cualquier comentario que me pueda encaminar a donde quiero llegar. Saludos

Buenas espero que no sea muy tarde.

Una de las cosas que podrias intentar para acceder a tu tabla Factura_Servicio, es creando un modelo propio para ella, y luego en tu model Factura en vez de utilizar una relacion MANY_MANY, utilizarias 2 relaciones diferentes, una que va de tu model Factura a el model Factura_Servicio y otra que va de tu model Factura a tu model Servicio a traves de de la relacion anterior. En tu model Factura seria algo como:


public function relations()

    {

        return array(

            'factura_servicio'=>array(self::HAS_MANY,'FacturaServicio','id_factura'),

            'servicios'=>array(

                self::HAS_MANY,'Servicio',array('id_servicio'=>'id'),'through'=>'factura_servicio'

            ),

        );

    }

Fijate como dividi en 2 la misma relacion MANY_MANY que tenias utilizando el atributo "through". Si manejas el ingles puedes revisar este enlace que te explica mucho mejor como manejar este tipo de relaciones.

Relaciones con Through