ORM relacionar 2 tablas
  • Saludos soy nuevo en esta comunidad, espero me despejen algunas dudas.

    Estoy trabajando con 2 tablas suponiendo CATEGORIA y PRODUCTOS, quiero listar los productos con la descripcion de la  categoria, es posible relacionar CATEGORIA y PRODUCTOS. He revisado el tutorial de http://wiki.kumbiaphp.com/Como_Crear_Relacion_1:N_KumbiaPHP_Framework,
    pero el la vista quiero usar $dt = new DataTable($productos); pienso que por la relación en el Modelo de belongs_to y has_many Entre las tablas se debe poder acceder a los atributos de Categoria, pero en la vista no consigo mostrar la descripción de la caategoria.

    Gracias
  • Buenas ya está solucionado por el IRC.

    Recomendación: Siempre que se pueda hacer en el motor de base de datos no lo hagas en PHP.

    Es recomendable el uso de Views en las bases de datos. Es más fácil y más rápido.
  • uso de Views en las bases de datos? a qué haces referencia o cómo se aplica?
  • Views son tablas virtuales, creadas a partir de una consulta.
    Tienen muchas utilidades, como para comentarlas todas.
    Cualquer base de datos decente tiene views, MySql no tenia hasta las últimas versiones.
    Usarlas siempre sera más rápido que usar PHP, además de facilitarnos el trabajo.

    Info:

  • Gracias joanhey!! voy a hecharle un vistazo a ese material.
  • Solucionado en el IRC.??

    Seria bueno que por lo menos pegaran la conversación aquí, o en la wiki.

    Estoy buscando algo del tema y quede en las mismas.

    Gracias.
  • Bueno es hora de contribuir a la comunidad, lo que hice fue lo siguiente:
    Tabla Marca (1 a muchos) Articulo
    En el actve record de marca debe ir la relación como sigue:
    <?php
    class Articulo extends ActiveRecord{

        public function initialize()    {
            $this->belongs_to('marca');
        }

        public function getArticulos(){
            return $this->find();
        }
    ?>
    En el active record de marca
    <?php
    class Marca extends ActiveRecord{
       public function initialize(){
            $this->has_many('articulo');
            
        }
    }
    ?>
    El controlador de Articulo
    <?php
    Load::models('articulo');

    class ArticuloController extends AdminController {
        protected function after_filter() {
            if (Input::isAjax()) {
                View::select(NULL, NULL);
            }
        }

        public function index($pagina = 1) {
            try {
                $usr = new Articulo();
                $this->articulo = $usr->getArticulos();
            } catch (KumbiaException $e) {
                View::excepcion($e);
            }
        }

    Finalmente en la vista, fijarse en el campo de marca que debe jalar de la tabla marca
    <div class="page-header">
        <h1>Gestión de Articulos</h1>
    </div>
    <div id="mensajes_flash" >        
        <?php View::content() ?>
    </div> 
    <?php
        View::partial('backend/barra_superior_listas', FALSE, array('texto' => 'Registrar Articulo', 'opciones' => FALSE));
        $dt = new DataTable($articulo);
    ?>
    <div align="center" class="table table-bordered table-striped">
    <table width='100%'>
    <thead>
    <tr style="background-color: #c0c0c0;">
       <th>#</th>
       <th>Marca</th>
       <th>Nombre</th>
       <th colspan='2'>Opt.</th>
    </tr>
    </thead>
    <tbody>
    <? $i=0;
        foreach ($articulo as $art) :?>
    <tr>
      <td><?php echo ++$i?></td>
      <td><?php echo $art->getMarca()->descripcion?></td>
      <td><?php echo $art->nombre?></td>
      <td><?=Html::linkAction("edit/$art->id/", Html::img('figuras/editar2.png'),'title="Editar"') ?></td>
      <td><?=Js::link("del/$art->id/",Html::img('figuras/eliminar2.png'),'¿Está seguro de esta operación?')?></td>      
    </tr>  
    <?php endforeach;?>
    </tbody>
    <tfoot>
    </tfoot>
    </table>
    </div>
     ?>
    Saludos, espero que le sirva al alguien