Necesito Ayuda Para Empezar Un Proyecto

Hola a todos,

Soy nuevo en Yii Framework y estoy empezando mi primera página con este sistema.

Estoy realmente estancado con una cosa que debería ser realmente simple. Necesito algún código de ayuda.

Lo que quiero hacer es lo siguiente:

Tengo un formulario en la página principal, que incluye dos dropDownLists. Uno muestra ciudades y el otro actividades.

Quiero mostrar, en una página distinta, en un CGridView, "empresas" que ofrezcan la "actividad" en la "ciudad" seleccionada.

En mi base de datos tengo estas tres tablas:

Activities


ActivityId

ActivityName

Companies


CompanyId

CompanyName

City

Schedule


ScheduleId

CompanyId

ActivityId

Hour

Day

Este es mi formulario, creo que todo está bien por aquí:




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

        'id'=>'search-form',

        'action'=>Yii::app()->baseUrl.'/activities/search',

        'method'=>'post',

        'enableAjaxValidation'=>true,

        'enableClientValidation'=>false));

?>

<div id="search">

        <label for="Activities_Activity" class="required">Choose Activity</label>

        <?php echo $form->dropDownList(Activities::model(), 'ActivityId', CHtml::listData(Activities::model()->findAll(), 'ActivityId', 'Activity'), array('options'=>array('42'=>array('selected'=>true)),'name'=>'activity')); ?>




        <label for="Cities_City" class="required">Choose City</label>

        <?php echo $form->dropDownList(Cities::model(), 'CityId', CHtml::listData(Cities::model()->findAll(), 'CityId', 'City'), array('options'=>array('24'=>array('selected'=>true)),'name'=>'City')); ?>     




        <?php

        $this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit','type'=>'info','label'=>'Find','loadingText'=>'Searching...','htmlOptions'=>array('id'=>'buttonStateful','style'=>'margin-left:132px')));?>

</div>

<?php

$this->endWidget();

?>



No tengo ni idea de qué poner en el Controller de actividades (¿o debería ponerlo en el de empresas?):




public function actionSearch()

     // :-(

{



Tampoco sé como definir las relations entre las tablas en mi modelo.

Y esto es lo que quiero rellenar en mi página de resultados:




    <?php 

    $this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'results-grid',

        'dataProvider'=>$model->search(),

        'columns'=>array(

            array(

                'name'=>'CompanyName',

                'header'=>'CompanyName',

                'type'=>'raw',

                'value'=>$data->CompanyName

            ),

            array(

                'name'=>'Day',

                'header'=>'Day',

                'type'=>'raw',

                'value'=>$data->Day

            ),

            array(

                'name'=>'Hour',

                'header'=>'Hour',

                'type'=>'raw',

                'value'=>$data->Hour

            ),

        ),

    ));  

    ?>



Alguien me puede ayudar? Estoy realmente estancado y sé que debe ser sencillísimo para alguien con experiencia.

Gracias por adelantado!

Creo que el estancamiento se ha debido a querer hacer todo a "mano", algo que no es negativo pero sí consume bastante tiempo…

Le recomiendo echar un vistazo al generador de código de Yii: Se llama Gii, que normalmente se cargaría algo así: http://localhost/miP...index.php?r=gii

Todas las relaciones que haya en la base de datos físicamente se replicarán en los modelos automáticamente al generar los modelos des de Gii.

De ahí en adelante será mucho más sencillo, ya que estoy seguro que lo desbloqueará :)

Saludos.

Después de que haya experimentado un poco con Gii (aunque si quiere hacer directamente también se vale), le recomiendo que dé el paso a un generador más “poderoso”… Le recomiendo AweCrud, que es una extensión de Gii (creada por mí ;) ) con varios “plus” que aceleran muchísimo el trabajo. Con soporte para Bootstrap, relaciones a llaves foráneas en formularios de inserción y actualización, entre muchísimos otros ;)

Saludos.

Hola!

Lo primero que tienes que hacer es definir las relaciones en tu model Schedule. Que seria algo asi:


public function relations()

	{

		return array(

			'companyId' => array(self::BELONGS_TO, 'Schedule', 'CompanyId'),

			'activityId' => array(self::BELONGS_TO, 'Schedule', 'ActivityId'),              

		);

	}

Y en tu schedule/admin.php seria algo asi:


$this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'results-grid',

        'dataProvider'=>$model->search(),

        'columns'=>array(

            array(

                'name'=>'CompanyId',

                'value'=>'$data->companyId->CompanyName',

            ),

            array(

                'name'=>'ActivityId',

                'value'=>'$data->activityId->ActivityName',

            ),

            array(

                'name'=>'Day',

                'header'=>'Day',

                'type'=>'raw',

                'value'=>$data->Day

            ),

            array(

                'name'=>'Hour',

                'header'=>'Hour',

                'type'=>'raw',

                'value'=>$data->Hour

            ),

        ),

    ));  

Espero que esto te ayude.