Yii Framework Forum: [RESUELTO] Tabla y Ambito - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

[RESUELTO] Tabla y Ambito CRUD d 1 tabla que contiene el registro clave y datos asociados Rate Topic: -----

#1 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 17 September 2010 - 11:43 AM

Hola,

Este es un problema que entre que soy nuevo en el uso de frameworks y más nuevo en ser "ordenado" en el desarrollo me tiene contra las cuerdas.

Tengo 2 tablas, una llamada "idiomas" y otra llamada "colores".

En la tabla idiomas tengo la definición de los idiomas que se usarán en las traducciones, en la de colores los colores con su código, el código de idioma y su descripción. Así sería

idioma
idiCodigo idiDescripcion
es español
en inglés
pt portugués

color
colCodigo idiCodigo colDescripcion
1 es blanco
1 en white
2 es negro
2 pt preto
3 es gris

También tengo una vista definida en la DB la cual, uniendo ambas me entrega

idioma_color
colCodigo idiDescripcion colDescripcion
1 español blanco
1 inglés white
1 portugués NULL
2
español negro
2 portugués preto
2 inglés NULL
3
español gris
3 inglés NULL
3 portugués NULL

Logré (no con mucho esfuerzo) que el CRUD mostrara sólo los registros en español (como descripción del color a editar).

Pero ahora se me presenta otro problema: ¿cómo muestro a modo de "planilla" los colores ya traducidos o sin traducir?
Supongamos la vista de "update"

Color
Descripción: BLANCO
inglés: [white ]
portugués: [ ]

Sospecho que (al menos para ver el detalle) debo "tocar" el archivo "view.php", y para lo referente a agregar y editar el _form.php

Honestamente, leí la documentación de CGRid, CActiveRecord pero no logro entender lo ahí expuesto si me sirve y como...

¿Podrá alguien asistirme? No es un problema "técnico" sino de índole "práctica".

Gracias desde ya...

PD: Si responde algún Argentino, en las inmediaciones de Capital Federal invito una cerveza si es necesario :D


0

#2 User is offline   sebas 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 496
  • Joined: 28-October 08
  • Location:Buenos Aires, Argentina

Posted 17 September 2010 - 11:48 AM

El teme es de SQL:

SELECT * FROM color WHERE idcolor NOT IN (SELECT idcolor FROM idioma_color WHERE idioma = 'español') 


o algo por el estilo...

Eso te diría los colores que no estan...

Saludos
0

#3 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 17 September 2010 - 11:58 AM

View Postsebas, on 17 September 2010 - 11:48 AM, said:

El teme es de SQL:

SELECT * FROM color WHERE idcolor NOT IN (SELECT idcolor FROM idioma_color WHERE idioma = 'español') 


o algo por el estilo...

Eso te diría los colores que no estan...

Saludos


Sebas... Gracias por responder...

Mi problema no es la consulta de SQL... sino cómo implementarlo en Yii... no pretendo un pormenorizado detalle de la solución.. sino... una suerte de "Oja de ruta" a seguir para poder resolverlo... ¿es mucho lo que pido? :$ de todas maneras todos los aportes son bienvenidos :)
0

#4 User is offline   sebas 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 496
  • Joined: 28-October 08
  • Location:Buenos Aires, Argentina

Posted 17 September 2010 - 01:47 PM

View PostDG Esteban A. Pérez, on 17 September 2010 - 11:58 AM, said:

Sebas... Gracias por responder...

Mi problema no es la consulta de SQL... sino cómo implementarlo en Yii... no pretendo un pormenorizado detalle de la solución.. sino... una suerte de "Oja de ruta" a seguir para poder resolverlo... ¿es mucho lo que pido? :$ de todas maneras todos los aportes son bienvenidos :)


ColorModel::model()->findAllBySql( "Acá va el SQL que te pase");

y eso te devuelve todos los modelos de color que no tienen traducción en ese idioma de forma de ActiveRecords de color.

Saludos!
0

#5 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 17 September 2010 - 02:31 PM

View Postsebas, on 17 September 2010 - 01:47 PM, said:

ColorModel::model()->findAllBySql( "Acá va el SQL que te pase");

y eso te devuelve todos los modelos de color que no tienen traducción en ese idioma de forma de ActiveRecords de color.

Saludos!


AAAaaaaaaaaaaaaaah! ok... Perdón que sea tan bruto :unsure:...

Ya me doy cuenta de por donde puedo asirme... Voy a experimentar un poco con esto y comentaré que resultados tengo.. Quizá hasta pueda luego "documentar" la solución con la que dé.

Si se te ocurren más ideas, las agradeceré...

E.
0

#6 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 17 September 2010 - 03:25 PM

honestamente, no entiendo...

posteo el código de mi "view.php"

<?php
$this->breadcrumbs=array(
'Colors'=>array('index'),
$model->trnColor,
);

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

<h1>View Color <?php echo $model->trnColor; ?></h1>

<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
//'id',
//'colCodigo',
//'idiCodigo',
'trnColor',
),
));
?>

<h2>Translations for <?php echo $model->trnColor; ?></h2>

<?php
$sSQL = "SELECT " .
"tbl_color.colCodigo, " .
"tbl_idioma.idiCodigo, " .
"tbl_idioma.idiDescripcion, " .
"IF(ISNULL(tbl_color.trnColor),'',tbl_color.trnColor) AS trnColor " .
"FROM tbl_color " .
"RIGHT OUTER JOIN tbl_idioma " .
"ON (tbl_color.idiCodigo = tbl_idioma.idiCodigo) AND ".
"(tbl_color.colCodigo = $model->colCodigo)" .
"ORDER BY tbl_idioma.idiDescripcion;";
$NoEspColorScope = Color::model()->findAllBySql($sSQL);
$this->widget('zii.widgets.CDetailView',
array(
'data'=>$NoEspColorScope,
'columns'=>array(
//'id',
'colCodigo',
'idiCodigo',
'idiDescripcion',
'trnColor',
),
)
);
?>
pretendo q se vea algo como

View Color AMARILLO

Descripción AMARILLO

Translations for AMARILLO

ingles: YELLOW
portugues:

Y obtengo:

View Color AMARILLO

Descripción AMARILLO

Translations for AMARILLO

Col Codigo Not set
Idi Codigo Not set
Idi Descripcion Not set
Trn Color Not set

No me doy cuenta definitivamente :-[
0

#7 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 20 September 2010 - 04:04 PM

Logré destrabar que me mostrara un registro de la tabla de Color en Español y debajo una grilla con los colores traducidos que ya existían.

Ahora la pesquisa es lograr que en vez de mostrarme el código del idioma (que es un campo comun a la tabla Color y la tabla de Idiomas) me muestre el nombre de dicho idioma...

¿Dónde debo definir esa "relacion"?¿de que manera?

He leído CActiveRecord, como definir las relaciones en el modelo de la tabla, más no entiendo cómo hacer referencia a un campo de la tabla Idioma en la vista de Color

La tabla Color tiene los campos: colCodigo, idiCodigo, colDescripcion y la de Idioma tiene idiCodigo e idiDescripcion.

La idea es que en la vista de Color tenga "disponible" el campo idiDescripvion de modo que pueda "dibujar" esto
Español: Blanco
Inglés: White
Portugués: (espacio en blanco)

¿Algún alma caritativa que me indique los pasos para realizarlo?

Gracias desde ya...
0

#8 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 21 September 2010 - 06:54 AM

Me podes mostar las relaciones que tenes definidas en el modelo Color?
Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#9 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 21 September 2010 - 07:59 AM

Gracias Pol.. Acá está

/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'tblArticulos' => array(self::MANY_MANY, 'Articulo', 'tbl_artcolor(artCodigo, colCodigo)'),
'idiCodigo' => array(self::BELONGS_TO, 'Idioma', 'idiCodigo'),
//'idiDescripcion' => array(self::BELONGS_TO, 'Idioma', 'idiDescripcion'),
);
}

Intenté poner lo que está comentado, pero me sale un error diciendo que el campo no está definido en el modelo...

Gracias por el interés
0

#10 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 21 September 2010 - 08:09 AM

entonces,


$color->idiCodigo->idiDecripcion te va a dar lo que necesitas!!!

Por que??

$color es una instancia del modelo Color.
Como tiene definida una relacion BELONGS_TO con Idioma llamada idiCodigo (seria mejor que la renombres a tblIdioma, o directamente idioma) $color->idiCodigo es el registro del modelo Idioma relacionado con ese $color.
$color->idiCodigo->idiDescripcion, es el campo idiDescripcion del modelo Idioma.

Si renombras la relacion idiCodigo a idioma asi:
public function relations()
{
   return array(
  	'tblArticulos' => array(self::MANY_MANY, 'Articulo', 'tbl_artcolor(artCodigo, colCodigo)'),
  	'idioma' => array(self::BELONGS_TO, 'Idioma', 'idiCodigo'), // <- ACA ESTA EL CAMBIO, en la clave del array!!
   );
}


entonces tendrias que usarlo asi:

$codigo->idioma->idiDescripcion
Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#11 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 21 September 2010 - 08:31 AM

Voy entendiendo...

Y como refiero al campo idiDescripcion en esta parte?...

<h2>Translations for <?php echo $model->trnColor; ?></h2>

<?php $this->widget('zii.widgets.grid.CGridView', array(
  'dataProvider'=>$coloresTraducidos,
  'columns'=>array(
	//'id',
	//'colCodigo',
	'idiDescripcion', // esto hace que yii no encuentre en el modelo Color el campo... Lo cual entiendo, pero no se cómo modificarlo..
	'trnColor',),
)); ?>


Hoy pensaba usar una vista.. pero concluí en que es el camino más largo al tener que definir en detalle el tratamiento de los datos...
0

#12 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 21 September 2010 - 08:34 AM

<h2>Translations for <?php echo $model->trnColor; ?></h2>

<?php $this->widget('zii.widgets.grid.CGridView', array(
  'dataProvider'=>$coloresTraducidos,
  'columns'=>array(
        //'id',
        //'colCodigo',
        'idiCodigo.idiDescripcion', // idiCodigo si no renombraste la relacion, si la renombraste a idioma seria idioma.idiDescripcion
        'trnColor',),
)); ?>


Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#13 User is offline   DG Esteban A. Pérez 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 35
  • Joined: 16-September 10
  • Location:Bs. As., Argentina

Posted 21 September 2010 - 08:44 AM

Siiiiiiiiiiiiiiiiii!.. anduvo!...

El que sabe, sabe.. el que no, aprende...
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users