El verdadero rico no es el que tiene mucho dinero sino el que tiene tiempo para estar con la gente que quiere y hacer lo que le gusta.

Tipos de relaciones en CakePHP

Tipos de relaciones en CakePHP

Publicado el 6 Octubre, 2014 por | Categoría:

Continuando con el Curso de desarrollo de aplicaciones web con el framework CakePHP en este video vamos a enfocarnos en los tipos de relaciones que maneja CakePHP, si hablamos de relaciones o asociaciones nos referimos en concreto a los Modelos en CakePHP. Los modelos son las clases que forman la capa de negocio de nuestra aplicación, estos son responsables de la gestión de los datos, su validez y sus interacciones, es decir, el flujo de la información. Cuando definimos un modelo, este puede ser accedido desde su controlador y CakePHP pondrá a disposición para acceder automáticamente cuando su nombre coincide con este controlador, por ejemplo si tenemos un controlador MeserosController este inicializará automáticamente el modelo Mesero para poder acceder desde ella a los datos de nuestra base de datos.


Pero también los Modelos pueden estar asociados con otros Modelos y acá es donde participan los tipos de relaciones en CakePHP:

Tipos de relaciones en CakePHP

Relación Tipo de asociación
Ejemplo
uno a uno hasOne Un usuario tiene un perfil
 uno a muchos hasMany Un usuario tiene muchos artículos
 muchos a uno  belongsTo Muchos artículos pertenecen a un usuario
 muchos a muchos hasAndBelongsToMany Muchos artículos tienen y pertenecen a muchas etiquetas

CakePHP maneja 4 tipos de relaciones para asociar un modelo con otro, en este video te explico con mas detalle la funcionalidad de cada uno de estos tipos de relaciones, para comenzar vamos a trabajar con las relaciones hasMany y belongsTo y lo pondremos a la práctica en nuestra aplicación del restaurante.

Vamos a crear una nueva tabla en nuestra base de datos llamado “mesas” para posteriormente poder asociarlo con nuestros meseros (que ya creamos en anteriores videos un modulo completo de la gestión de estos meseros), de tal forma que existirá una relación de uno a muchos, es decir, que un mesero estará asociada a muchas mesas. Aprenderemos a crear nuestras relaciones desde sus respectivos modelos utilizando las variables $hasMany y $belongsTo que son palabras reservadas que maneja CakePHP para poder definir las asociaciones entre modelos, veremos que estas variables pueden ser tratadas tanto como cadenas como con matrices (arreglos) y conoceremos desde la documentación oficial de CakePHP los parámetros que puede manejar cada una de estas asociaciones.

A continuación te dejo el video 5 donde te hablo de todo lo mencionado anteriormente y otras características más puestas a la práctica:

Ahora dime tú, que te pareció los tipos de relaciones que maneja CakePHP? desde mi punto de vista aprender a relacionar nuestros modelos nos da amplias posibilidades para desarrollar nuestras aplicaciones web, de tal forma que vamos a poder asociar nuestros módulos para que así cada uno de estos trabajen en conjunto dentro de nuestra aplicación, te recomiendo que revises la documentación de CakePHP para que así tu mismo puedas observar las ventajas que nos trae el poder asociar cada uno de nuestros modelos acorde a nuestras necesidades. Anímate a dejar un comentario acá abajo con tu opinión y sugerencias.

Para finalizar sugiero que no te pierdas los próximos vídeos que estaré publicando periódicamente en mi blog y si te pareció interesante el artículo y el video no dudes en compartirlo en las redes sociales. Comparto el código de todo lo avanzado en el video con la base de datos para que tu mismo puedas probarlo, espero te sea muy útil 8-)

Sigue todas las lecciones del curso AQUÍ.

Saludos!!!

firma emm

 


Descargar código

Por favor comparte esta lección:

¿Te gustó el artículo? ¡Suscríbete ahora mismo!

Recibe mis últimos artículos, recursos, tutoriales y mucho más.

, ,

Comentarios

  • Angela Patricia Mayor Ortiz

    Y si quiero que la llave foranea sea el nombre del mesero… si mesero_id le pongo como tipo de datos varchar hay problema?

    • Edson

      Hola Angela, gracias por valorar mi trabajo, respecto a tu duda, en lo personal no te lo recomiendo, si la llave foranea es el id del mesero y quieres recuperar el nombre del mismo puedes hacerlo a partir de este id y acceder a todos los datos del mesero. Saludos.

  • Angela Patricia Mayor Ortiz

    Como meto $m[serie] dentro de un select?

  • Lucas Jose

    Buenas, Edson!!!

    Tengo dos tablas.
    Una llamada arbols la cual consta de los siguientes campos:

    La primera consta de los siguientes campos
    id (int 11)
    nombre (varchar(255)
    especie_id (int 11)

    La segunda tabla llamada fotos consta de los siguientes campos:
    id (int 11)
    foto (varchar 255)
    foto_dir (varchar 255)
    arbol_id (int 11)

    Si bien el modelo Arbol está relacionado con el modelo Especie,
    lo dejo de lado a éste último pues no es motivo de consulta.
    El Modelo Arbol tiene una relación hasMany con el modelo Foto.

    En el modelo Arbol tengo lo siguiente:
    public $hasMany = array(
    ‘Foto’=> array(
    ‘className’ => ‘Foto’,
    ‘foreignKey’ => ‘arbol_id’,
    ‘dependent’ => true
    )
    );

    En el modelo Foto tengo lo siguiente:
    public $belongsTo = array(
    ‘Arbol’=> array(
    ‘className’=>’Arbol’,
    ‘foreign_key’=>’arbol_id’
    )
    );

    Ahora bien, dentro de ArbolsController en public function view($id=null)
    deseo hacer la siguiente consulta SQL:
    SELECT * FROM arboles as a join fotos as f on a.id=f.arbol_id
    o sea que me devuelva todo los fotos relacionadas con un el id de un arbol en particular pasado como parametro en view
    Si dicha consulta la hago usando MySQL
    $registros=mysqli_query($conexion,” select * from arboles as a join fotos as f on a.id=f.arbol_id”)
    anda.
    Pero si deseo hacerla usando el metodo query de tal manera:
    $registros = $this->Arbol->query(“select * from arboles as a JOIN fotos as f ON a.id=f.arbol_id”);
    o
    $registros = $this->Arbol->query(“select * from arboles as a INNER JOIN fotos as f ON a.id=f.arbol_id”);
    NO anda.
    ?????
    Leyendo el Cookbook veo que hay una manera de hacer los joins.
    http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html
    No la entiendo

    Agradecería si me lo puede explicar.

    Desde ya, muchas gracias!