Formulario ingreso tabular

Buenas a todos. Espero se encuentren bien, soy nuevo en yii y me parece un excelente framework. He estado leyendo guias y tutoriales con respecto a este tema (Ingreso tabular) y tengo la siguiente duda con respecto a como manejar un registro tabular entre 2 tablas/modelos que se relacionan de muchos a muchos.

Resulta que tengo la siguiente estructura en mi base de datos:

Solicitud

co_solicitud(pk)

co_status

tipo_mov

nu_id_solicitante

fe_solicitud

Detalle_Solicitud

co_solicitud(pk)(fk1)

co_item(pk)(fk2)

cant_solicitud

nu_id_asignado_a

Item

co_item(pk)

status_item

tx_item

Bien mi problema es que necesito realizar un formulario tipo Maestro/Detalle con ingreso tabular para la parte de Detalle_solicitud, pero Detalle_Solicitud al tener una clave primaria compuesta, no se como manejar esa situacion, cabe destacar que en la tabla "Item" no haré ningun ingreso ni registrare nada, puesto que es unatabla replicada que viene de otro sistema, de alli solo extraere la informacion, en este caso los items que se esten solicitando.

Estuve investigando y leyendo al respecto, lo unico que consegui fue disociar la relacion MANY_MANY, y cambiarla por HAS_MANY, y utilizar una extesion llamada "ztabulariputmanager" con la cual puedo realizar el formulario tipo maestro/detalle. pero tengo problemas puesto al seguir la guia no me muestra nada al ingresar a la accion create de solicitud. Estaria muy agradecido por la ayuda que me puedan brindar, si hay alguna otra manera de trabajar o manejar esta situacion bienvenida sea, pero sin cambiar mi modelo de base de datos jejej. De antemano muchas gracias. Aca coloco los codigos de los archivos:

Modelo Solicitud:


class Solicitud extends CActiveRecord

{

.

.

.

public function relations()

	{

'detalles' => array(self::HAS_MANY,'DetalleSolicitud', 'co_solicitud'),

'catalogos' => array(self::HAS_MANY, 'Catalogo', array('co_item'=>'co_item'),'through'=>'detalles'),

		);

	}

}

Modelo Detalle_Solicitud


public function relations()

	{

	return array(

	'solicitudes'=> array(self::BELONGS_TO, 'Solicitud','co_solicitud'),

	'catalogos'=> array(self::BELONGS_TO, 'Catalogo', 'co_item'),

	);

}

Solicitud Controller:


public function actionCreate()

	{

		$model=new Solicitud();

		$detalleManager= new DetalleManager($model);


		// Uncomment the following line if AJAX validation is needed

		 $this->performAjaxValidation($model);


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

        {

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

            $detalleManager->manage = ($model, $_POST['DetalleSolicitud']);

 

            if($model->validate() && $detalleManager->validate()){

            	$model->save();

            	$detalleManager->save($application);

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

            }

            

        }


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

			'detalleManager'=>$detalleManager,

			'model'=>$model,

		));

	}



View form solicitud:


<?php

/* @var $this SolicitudController */

/* @var $model Solicitud */

/* @var $form CActiveForm */

?>


<div class="form-horizontal">


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

	'id'=>'solicitud-form',

.

.

.

	

<table id="detalles">

    <thead>

        <tr>

            <td>Item</td>

            <td>Cantidad</td>

            <td>Asignado a:</td>

            <td>

                <?php echo CHtml::link('add', '', array('onClick'=>'addStudent($(this))', 'class'=>'add'/* 'submit'=>'', 'params'=>array('Student[command]'=>'add', 'noValidate'=>true)/**/));?>

            </td>

        </tr>

    </thead>

    <tbody>

    <?php foreach($detalles->items as $id=>$model): ?> 

        <?php $this->renderPartial('detalleSolicitud/_form', array('id'=>$id, 'model'=>$model, 'form'=>$form));?>

    <?php endforeach;?>

    </tbody>

</table>

 

<?php $this->renderPartial('detalleSolicitud/_form', array('detalles'=>$detalles, 'form'=>$form));?>

.

.

.

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


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

Form DetalleSolicitud




<tr>     

    <td> 

        <?php echo $form->textField($model,"[$id]co_item");?>

    </td>

    <td>

        <?php echo $form->textField($model,"[$id]ca_solicitud");?>

    </td>

    <td>

        <?php echo $form->textField($model, "[$id]nu_ci_asignado_a");?>

    </td>

    <td>

        <?php echo CHtml::link(

                'delete', 

                '', 

                array(

                    'class'=>'delete',

                    'onClick'=>'deleteStudent($(this))', /*

                    'submit'=>'', 

                    'params'=>array(

                        'Student[command]'=>'delete', 

                        'Student[id]'=>$id, 

                        'noValidate'=>true)/**/

                    ));?>

    </td>

</tr>

Clase extendida de la extension TabularManager:


<?php

yii::import('application.extensions.TabularInputManager');


class DetalleManager extends TabularInputManager

{

    protected $class='Detalle';


    /**

     * Retrieve the list of Detalless

     * @return array of Detalles objects

     */

    public function getItems()

    {

        if (is_array($this->_items))

            return $this->_items;

        else {

            return array(

                'n0' => new DetalleSolicitud,

            );

        }

    }


    /**

     * Deletes the uneeded Detalles

     */

    public function deleteOldItems($model, $itemsPk) {

        $criteria = new CDbCriteria;

        $criteria->addNotInCondition('co_solicitud', $itemsPk);

        //Student has a attribute classroom_id: indicates which classroom s/he is in.

        $criteria->addCondition("co_item = {$model->primaryKey}");


        DetalleSolicitud::model()->deleteAll($criteria);

    }




    /**

     * Create a new TabularInputManager and loads the current child items

     */

    public function load($model) {

        $return = new DetalleManager;

        foreach($model->solicitudes as $item)

            $return->_items[$item->primaryKey]=$item;

        return $return;

    }


    /**

     * Set the unsafe attributes for the child items, usually the primary key of the parent model

     */

    public function setUnsafeAttribute($item, $model) {

        $item->co_solicitud = $model->primaryKey;

    }

}


?>

Buenas.

No se si te entendí pero pienso que lo que quieres hacer es que a una solicitud en el momento de crearla se le puedan asignar varios detalles, y que al darle a guardar cree la solicitud y le asigne los datos.

Yo lo que haría sería lo siguiente:

http://www.eha.ee/labs/yiiplay/index.php/en/site/extension?view=tabular

Un saludo.