Yii Framework Forum: Tabla MANY_MANY con más atributos - Yii Framework Forum

Jump to content

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

Tabla MANY_MANY con más atributos Rate Topic: -----

#1 User is offline   Sagitta 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 63
  • Joined: 05-November 09

Posted 10 February 2010 - 07:52 AM

Hola estoy usando el Yii-1.0.10.r1472,

tengo una tabla A:
------------------
id_A PK
nombre

otra tabla B:
-------------
id_B PK
nombre

entre ellas tengo una relación MANY_MANY,
tabla rel_A_B:
-------------
id_A PK
id_B PK
concedida

La cuestión es que en esa tabla intermedia tengo una variable booleana (concedida se llama) que me sirve para marcar ciertos registros.

Ahora bien:

1.-) ¿Cómo puedo meter una condición en el ON que se realiza al usar la tabla de relaciones donde ponga concesion=1?

2.-) Hay una cosa que no me queda muy clara y es ¿cómo se insertan registros en las tablas MANY_MANY? Primero se hace save de A, luego save de B y los registros para save de rel_A_B?

He estado mirando la documentación y no he visto nada claro al respecto.

Saludos y gracias por adelantado.

PD: Si el cambio de versión a 1.1 facilita o soluciona algo de lo planteado no me importaría migrar la aplicación.
0

#2 User is offline   Sagitta 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 63
  • Joined: 05-November 09

Posted 10 February 2010 - 08:01 AM

Pongo más datos:

La consulta que veo en las trazas es esta:
(tabla A-> empresas, tabla B-> demarcaciones y tabla rel_A_B-> licitadoras_tdtl)

SELECT `demarcaciones`.`id` AS `t0_c0`, `demarcaciones`.`referencia` AS `t0_c1`, `demarcaciones`.`denominacion` AS `t0_c2`, `demarcaciones`.`canal_multiple` AS `t0_c3`, `demarcaciones`.`potencia_maxima` AS `t0_c4`, `demarcaciones`.`superficie_total` AS `t0_c5`, `demarcaciones`.`densidad_poblacion` AS `t0_c6`, `demarcaciones`.`observaciones` AS `t0_c7`, empresas.`id` AS `t1_c0`, empresas.`nombre` AS `t1_c1`, empresas.`acciones_participaciones` AS `t1_c2`, empresas.`valor_nominal` AS `t1_c3`, empresas.`cif` AS `t1_c4`, empresas.`direccion` AS `t1_c5`, empresas.`telefono` AS `t1_c6`, empresas.`baja_logica` AS `t1_c7`
FROM `demarcaciones`
LEFT OUTER JOIN `licitadoras_tdtl` empresas_empresas ON (`demarcaciones`.`id`=empresas_empresas.`id_demarcacion`)
LEFT OUTER JOIN `empresas` empresas ON (empresas.`id`=empresas_empresas.`id_empresa`)
WHERE (empresas.id=4)


Y me gustaría que fuese de esta otra manera (añadiendo en el ON una condicion)

SELECT `demarcaciones`.`id` AS `t0_c0`, `demarcaciones`.`referencia` AS `t0_c1`, `demarcaciones`.`denominacion` AS `t0_c2`, `demarcaciones`.`canal_multiple` AS `t0_c3`, `demarcaciones`.`potencia_maxima` AS `t0_c4`, `demarcaciones`.`superficie_total` AS `t0_c5`, `demarcaciones`.`densidad_poblacion` AS `t0_c6`, `demarcaciones`.`observaciones` AS `t0_c7`, empresas.`id` AS `t1_c0`, empresas.`nombre` AS `t1_c1`, empresas.`acciones_participaciones` AS `t1_c2`, empresas.`valor_nominal` AS `t1_c3`, empresas.`cif` AS `t1_c4`, empresas.`direccion` AS `t1_c5`, empresas.`telefono` AS `t1_c6`, empresas.`baja_logica` AS `t1_c7`
FROM `demarcaciones`
LEFT OUTER JOIN `licitadoras_tdtl` empresas_empresas ON (`demarcaciones`.`id`=empresas_empresas.`id_demarcacion` AND empresas_empresas.concedida=1)
LEFT OUTER JOIN `empresas` empresas ON (empresas.`id`=empresas_empresas.`id_empresa`)
WHERE (empresas.id=4)


¿Por que pone el alias empresas_empresas en la tabla de relación? ¿Se podría modificar algo en su modelo como el alias?
0

#3 User is offline   Horacio Segura 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 11-August 09
  • Location:Argentina

Posted 10 February 2010 - 09:58 AM

mira esto
http://code.google.c...s/detail?id=689
KISS - Keep It Simple Stupid
ASAP-As Soon As Possible
http://www.yiiframew...oc/cookbook/71/
http://hmsegura.blogspot.com/
0

#4 User is offline   Sagitta 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 63
  • Joined: 05-November 09

Posted 10 February 2010 - 10:37 AM

Osea que está previsto para la versión 1.2a

Por ahora lo que voy a hacer es poner las relaciones entre las 3 tablas y usarlas.

A ver que tal y os cuento.

PD: Horacio, he instalado el cliente de chat y he entrado al canal #yii sin problemas (protocolo IRC). No tengo abierto en el router el puerto y no me ha dado problemas.
0

#5 User is offline   Sagitta 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 63
  • Joined: 05-November 09

Posted 10 February 2010 - 01:38 PM

Pues efectivamente para el tema de consultas y hacer filtros en la tabla intermedia lo he hecho poniendo las relaciones en el modelo de la tabla intermedia. Luego en la consulta ya se añaden las condiciones.

Siendo las relaciones del modelo de la tabla intermedia estas:

	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(
                    'empresas' => array(self::BELONGS_TO, 'Empresas', 'id_empresa','alias'=>'empresas'),
                    'demarcaciones' => array(self::BELONGS_TO, 'Demarcaciones', 'id_demarcacion','alias'=>'demarcaciones'),
		);
	}


Luego trataré el tema de save() cuando termine de meter el modelo en todas las tablas intermedias que tengo.

Saludos.
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