Generador de relaciones

Saludos a todos, estoy iniciando con Yii, es un buen framework por lo que pude investigar, ahora estoy con un inconveniente:

Estoy trabajando con mysql y no puedo hacer que genere las relaciones de la base de datos en el modelo, he intentado generar el script de creación con DBDesigner 4 y tambien con Power Designer 12.5.

Por favor si alguien pudiera ayudarme. Gracias.

Hola Susana,

Pruebe con MySQL Worckbench… es el Admin y modelador oficial :)

Permite añadir las relaciones… y lo mejor de todo, permite sincronizar el modelo con la BD.

Si usas el motor de almacenamiento MyISAM, tengo entendido que no soporta diseño relacional de base de datos. No he trabajado con MyISAM en yii, pero supondría que el generador de modelos de yii (gii) no puede obtener información de las relaciones de la base de datos porque en MyISAM no existen.

Podrías cambiar el motor de almacenamiento de las tablas de tu base de datos a InnoDB y ver si se soluciona el problema.

Hola que tal, aparte te recomiendo estos videos para que veas sobre las relaciones, a mi me ayudo mucho.

58 videos cortos sobre yii.

utilizan UNO A MUCHOS, MUCHAS A MUCHOS, MUCHOS A UNO, STAF. y muchos temas de yii,

como dice @tomsea, proveerle INNODB como motor de almacenamiento, y ahí si se crearán las relaciones…, si el caso persiste, entonces, susana, copia un extracto de un par de tablas y su relacion de tu modelo de datos, aca, y asi podemos simular el caso localmente.

Gracias por su respuesta, y sip ahora estoy intentando con WorkBench.

En problemas nuevamente, he intentado hacerlo con WorkBench, pero no se como cambiar el motor de almacenamiento de las tablas a InnoDB. Por favor, su colaboración, se agradece.

Susana,

Al modelar las tablas en workbench, en el tipo de tabla en lugar de “Default” se selecciona InnoDB… o en su defecto en la configuración de MySQL (archivo my.ini o my.cnf) se define el motor por defecto… así que por facilidad prefiero hacerlo en el modelador como tal… aunque la segunda opción resolvería todos los problemas de una vez por todas :)

También puedes especificar el motor de almacenamiento en el SQL al crear las tablas sin que dependas de una aplicación de administración en particular. Ejemplo:


CREATE TABLE mi_tabla (

	id INT NOT NULL AUTO_INCREMENT,

	campo VARCHAR(100) NOT NULL,


	PRIMARY KEY (id)

) ENGINE=InnoDB;

En phpMyAdmin también lo puedes hacer, en la pestaña "Operaciones" al visualizar una tabla.

Muchisimas gracias por su respuesta, he buscado como cambiar de motor y no he logrado hacerlo, en WorkBench como cambio el tipo de tabla?, jamas he utilizado WorkBench, por favor. Gracias nuevamente.

Logré hacerlo en WorkBench, sin embargo cuando ejecuto el script en PhpMyAdmin, me crea la base de datos pero no las tablas, a que puede deberse eso?. Gracias por la colaboración.

Susana,

no es necesario que desde workbench copies el SQL generado y lo pases a mano a phpmyadmin, este ultimo siempre friega mucho cuando se trata de scripts no generads por el mismo.

workbench te permite conectarte a tu fuente de datos y de una manera muy amistosa te permite sincronizar tu modelo de workbench con el modelo en mysql, el solito sabrá que fue modificado o que debe agregarse o eliminarse. Para ello,

  • menu Database / Sincronize model (o presionar control+y)
  • el asistente preguntara por una conexion…"Manage Stored Connections"…configura una para que la pueda usar de forma persistente en esa base de datos, pedira: usuario y clave de tu servidor de mysql donde quieres insertar la DB, asi como el hostname y el puerto (localhost y 3306 respectivamente)
  • cuando ya tienes configurada una conexion puedes usarla, aparecerá en: Stored Connection en el mismo asistente
  • sigue los pasos, y veras que tu modelo en MySQL será actualizado (sincronizado).

Gracias por sus respuestas…lo logré (con su ayuda), seguiré avanzando con este framework. Bendiciones a todos.

Sin usar el programa, con la sentencia ALTER TABLE tabla ENGINE="InnoDB" te cambia la tabla que quieras.

Un saludo