Tabla MANY_MANY con más atributos

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.

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?

mira esto

http://code.google.com/p/yii/issues/detail?id=689

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.

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.