ActiveRecord ABM de ejemplo

edited marzo 2008 in Principiantes
Estoy tratando de hacer Altas, Bajas y Modificaciones con ActiveRecord utilizando kumbia

Tengo la siguiente Tabla:

-- phpMyAdmin SQL Dump
-- version 2.9.1.1-Debian-2ubuntu1.1
-- <!-- m --><a class="postlink" href="http://www.phpmyadmin.net">http://www.phpmyadmin.net</a><!-- m -->
--
-- Servidor: localhost
-- Tiempo de generación: 29-02-2008 a las 15:37:48
-- Versión del servidor: 5.0.38
-- Versión de PHP: 5.2.1
--
-- Base de datos: `demo`
--
CREATE DATABASE `demo` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `demo`;

--
--
-- Estructura de tabla para la tabla `album`
--

CREATE TABLE `album` (
`id` int(11) NOT NULL auto_increment,
`nombre` varchar(100) NOT NULL,
`fecha` date NOT NULL,
`valor` decimal(12,2) NOT NULL,
`artista_id` int(11) NOT NULL,
`estado` char(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Volcar la base de datos para la tabla `album`
--

INSERT INTO `album` (`id`, `nombre`, `fecha`, `valor`, `artista_id`, `estado`) VALUES
(1, 'el prime', '2008-02-29', 123.00, 0, 'D');


*** tengo un proyecto llamado demo:

./demo/models/album.php que contiene:

<?php
Class Album extends ActiveRecord {
public $debug = true;
public $display_errors = true;
}
?>


/demo/controllers/album_controller.php que contiene:

<?php
class AlbumController extends ApplicationController {
Function ingresoalbum() {
$Album = new Album();
$Album->nombre = "altanombre";
$Album->fecha = date("Y-m-D");
$Album->valor = 123;
$Album->estado = "D";
$Album->create();
}

Function modificoalbum() {
$album = $Album->find(1);
$album->nombre = "modificonombre";
$album->fecha = date("Y-m-D");
$album->valor = 555;
$album->estado = "E";
$album->save();
}

Function borraralbum() {
$Album->delete(1);
}
}
?>

/demo/views/album/ingresoalbum_phtml que contiene:

Se esta tratando de ingresar el id:<?= $Album->id ?>

/demo/views/album/borraralbum_phtml vacio

y /demo/views/album/modifico_phtml vacio.


Cuando en el browser pongo <!-- m --><a class="postlink" href="http://localhost/demo/album/ingresoalbum">http://localhost/demo/album/ingresoalbum</a><!-- m -->
no me dice nada y no da de alta el registro

Cuando en el browser pongo <!-- m --><a class="postlink" href="http://localhost/demo/album/modficoalbum">http://localhost/demo/album/modficoalbum</a><!-- m -->
me dice:
Fatal error: Call to a member function find() on a non-object in /var/www/demo/controllers/album_controller.php on line 16

Cuando en el browser pongo <!-- m --><a class="postlink" href="http://localhost/demo/album/modficoalbum">http://localhost/demo/album/modficoalbum</a><!-- m -->
me dice:
Fatal error: Call to a member function delete() on a non-object in /var/www/demo/controllers/album_controller.php on line 26

Estoy tratando de armar un ejemplo completo con lo que dice el libro pero no me funciona. No existe ningun ejemplo basico en el libro donde este todo el codigo desde 0 para hacer una aplicacion basica de mantenimiento. Los ejemplos se dan con pedazos de codigo, estoy tratando de usar el ejemplo que hay en la parte de ActiveRecord, pero cuando trato de llevarlo al MVC de Kumbia me faltan pedazos y cuando los coloco como entiendo que van no me anda.
QUE ESTOY HACIENDO MAL ???

Seria bueno que pusieran un ejemplo completo basico que haga CRUD en una tabla usando ActiveRecord, ya que a los ejemplos del libro siempre les falta algo. Algo bien basico pero completo.

Saludos,

Daniel

Comentarios

  • edited 1:52
    Mira en el blog de Kumbia, allí te puedes bajar 3 vídeos de la construcción de una tienda que a mi al emnos me ha ido de maravilla.
  • edited 1:52
    Gracias por la info Proclamo.
    Los videos estan muy buenos, pero no tienen precisamente lo que quiero hacer, mantenimiento sin usar StandarForm.
  • Pero eso lo puedes hacer tu no todo lo hace el Framework, la idea es que tu hagas que tu sistema sea lo mas auto-administrable posible existe una alternativa que limita bastante que son los formulario StandardForm yo lo he utilizado pero realmente no hay nada mejor que uno mismo haga las cosas a mi parecer y forma de ver las cosas... <!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->

    Éxitos...
  • edited 1:52
    Si, lo quiero hacer yo pero utilizando la capa de abstraccion ActiveRecord que contiene el framework. Si te fijas en el codigo, estoy tratando de hacer un CRUD utilizando el framework, pero sin usar standardform y no me funciona. Y por alguna razon el acceso a la BD no me esta funcionando.
  • creo que tienes mal la forma como colocas los nombre de los archivos de las vistas...
    deberia ser /demo/views/album/ingresoalbum.phtml
  • edited 1:52
    Deivinson, el problema no es ese, lo escribi mal en el foro pero en mi servidor esta con el punto en vez del guion bajo.

    Voy a ser mas especifico con la pregunta, tengo:

    Function modificoalbum() {
    $album = $Album->find(1);
    $album->nombre = "modificonombre";
    $album->fecha = date("Y-m-D");
    $album->valor = 555;
    $album->estado = "E";
    $album->save();
    }

    y me da el error:Fatal error: Call to a member function find() on a non-object in /var/www/demo/controllers/album_controller.php on line 16

    Me esta diciendo algo asi como que esta llamando a una funcion de un objeto, desde algo que no es un objeto. Como que $Album no es una Clase.

    ¿Me esta faltando algun tipo de comando para conectarme a la BD primero o con lo especficado alcanza?
  • Varias Dudas respecto a tu pregunta..

    1->Que version utilizas?
    2->Tu tienes en el Directorio Models/albun.php?
  • edited 1:52
    Version de Kumbia 0.47a
    Como dice en el post original, si tengo definido models/album.php.
  • cre que tu error esta en la forma como accedes a la class album date cuenta que ahora a tu codigo yo le coloque $this->...
    Function modificoalbum() {
    $album = $this-&gt;Album-&gt;find(1);
    $album-&gt;nombre = &quot;modificonombre&quot;;
    $album-&gt;fecha = date(&quot;Y-m-D&quot;);
    $album-&gt;valor = 555;
    $album-&gt;estado = &quot;E&quot;;
    $album-&gt;save();
    }
    
  • edited 1:52
    Encontre 2 problemas:

    1- al definir el modelo en album.php, class lo puse con c mayuscula, por lo tanto no me lo tomaba como una clase
    2- en el ejemplo de la pagina 72, cuando se define la tabla album se definen varios campos como notnull y luego al crear un registro nuevo, no se le asignan valores a alguno de estos campos. Por lo que supongo que debe dar algun error (que no se como localizar) y por eso no me ingresaba el registro. Al cargar todos los campos funciono perfectamente. Supongo que habria que corregirlo en el libro.

    Igual sigue si funcionar la modificacion y el borrado de registros, sigue dando el mismo error
  • Hagamos algo pega tu controller, model y la estrutura de la BD para revisar bien yo he probado eso y nunca he tenido problema pero vamos a volver hacerlo...
  • edited 1:52
    Ahora si me anduvo:

    el codigo de album_controller.php es el siguiente:


    <?php

    class AlbumController extends ApplicationController {

    Function borraralbum() {

    // $Productos->delete(123); como esta en el manual 0.14C pagina 76

    $this->Album->delete(1);
    $this->Album->save();

    }

    Function modificoalbum() {

    // $producto = $Productos->find(123); como esta en el manual 0.14C pagina 76

    $album = $this->Album->find(5);
    $album->nombre = "modificonombre";
    $album->fecha = date("Y-m-d");
    $album->hora = date("H:i:s");
    $album->valor = 555;
    $album->estado = "M";
    $album->artista_id = "321";
    $album->save();
    }

    Function ingresoalbum() {

    $album = new Album();
    $album->nombre = "altanombre";
    $album->fecha = date("Y-m-d");
    $album->hora = date("H:i:s");
    $album->valor = 123;
    $album->estado = "D";
    $album->artista_id = "123";
    $album->create();
    }

    Era como decias Deivinson:

    En el libro dice: $Productos->delete(123);

    y lo que funciona es $this->Productos->delete(123);

    Caso similar para el update, utilizando el find()

    Muchas Gracias

    Saludos,

    Daniel
  • Si efectivamente es un detalle que tiene el libro gracias lo vamos a corregir...
Sign In or Register to comment.