Giter Club home page Giter Club logo

activerecord's Introduction

KumbiaPHP

Scrutinizer Code Quality Code Coverage Build Status Code Climate

ESPAÑOL - ENGLISH

ActiveRecord

Nuevo ActiveRecord en desarrollo.

No usar en producción

Instalar con composer en KumbiaPHP

Necesita KumbiaPHP > 0.9RC

  • Crear el archivo composer.json en la raiz del proyecto:
--proyecto  
    |  
    |--vendor  
    |--default  
    |--core  
    |--composer.json        Acá va nuestro archivo  
  • Añadir el siguiente código:
{
    "require": {
        "kumbia/activerecord" : "dev-master"
    }
}
  • Ejecutar el comando composer install

  • Seguir los pasos 2 y 3 de la siguiente sección.

Instalar en KumbiaPHP

Necesita KumbiaPHP > 0.9RC

  1. Copiar config/config_databases.php en app/config/databases.php y configurar

  2. (Opcional) Añadir en app/libs/ : lite_record.php y/o act_record.php

LiteRecord

Para los que prefieren SQL y las ventajas de un ORM, incluye un mini ActiveRecord

<?php
//app/libs/lite_record.php

/**
 * Record 
 * Para los que prefieren SQL con las ventajas de ORM
 *
 * Clase padre para añadir tus métodos
 *
 * @category Kumbia
 * @package ActiveRecord
 * @subpackage LiteRecord
 */

//use Kumbia\ActiveRecord\LiteRecord as ORM;

class LiteRecord extends \Kumbia\ActiveRecord\LiteRecord
{

}

ActRecord

ActiveRecord completo

<?php
//app/libs/act_record.php

/**
 * ActiveRecord Nuevo
 *
 * Clase padre para añadir tus métodos
 *
 * @category Kumbia
 * @package ActiveRecord
 * @subpackage ActiveRecord
 */

//use Kumbia\ActiveRecord\ActiveRecord;

class ActRecord extends \Kumbia\ActiveRecord\ActiveRecord
{

}

Ejemplo

Modelo

<?php
//app/models/personas.php

class Personas extends ActRecord //o LiteRecord según el que prefiera
{

}

O directamente sin clase padre

<?php
//app/models/personas.php

class Personas extends \Kumbia\ActiveRecord\LiteRecord
{

}

Controller

<?php
//app/controller/personas_controller.php

class PersonasController extends AppController {

    public function index() {
        $this->data = Personas::all();
    }
    
    public function find($id) {
        $this->data = Personas::get($id);
    }
}

Uso de métodos en LiteRecord

Filtrar datos

    //obtener todos los registros como array
    $filas = Personas::all();
    echo $filas[0]->nombre;

    //obtener un registro por su clave primaria
    $fila = Personas::get($personaId);
    echo $fila->nombre;

    //obtener los registros como array según el filtro 
    $filas = Personas::filter("WHERE nombre LIKE ?", [$nombrePersona]);
    echo $filas[0]->nombre;

    //obtener registro según sql
    $fila = Personas::first("SELECT * FROM personas WHERE nombre = :nombre", [":nombre" => $nombrePersona]);
    echo $fila->nombre;

    //obtener array de registros según sql
    $filas = Personas::all("SELECT * FROM personas WHERE fecha_contrato >= ?", [$fechaContrato]);
    echo $filas[0]->nombre;

DML / Crear, actualizar, borrar

    //creando un nuevo registro
    $personaObj = new Personas();
    $personaObj->create([
        'nombre' => 'Edgard Baptista',
        'cargo' => 'Contador',
        'fecha_contrato' => date('Y-m-d'),
        'activo' => 1
    ]); //retorna True o False si hay éxito o error respectivamente

    //creando un nuevo registro //alternativa
    //por favor, prefiera este método por su simplicidad. 
    //save ejecuta el método create cuando falta la clave primaria y 
    //el de actualización cuando existe
    $personaObj = new Personas();
    $personaObj->save([
        'nombre' => 'Edgard Baptista',
        'cargo' => 'Contador',
        'fecha_contrato' => date('Y-m-d'),
        'activo' => 1
    ]); //retorna True o False si hay éxito o error respectivamente

    //creando un nuevo registro //alternativa //método abreviado
    //pasamos los datos cuando se instancia la clase
    $personaObj = new Personas([
        'nombre' => 'Edgard Baptista',
        'cargo' => 'Contador',
        'fecha_contrato' => date('Y-m-d'),
        'activo' => 1
    ]);
    $personaObj->save(); //retorna True o False si hay éxito o error respectivamente

    //actualizar un registro
    //primero buscar el registro que se quiere actualizar
    $personaObj = Personas::get($personaId);

    $personaObj->update([
        'nombre' => 'Edgard Baptista',
        'activo' => 0
    ]); //retorna True o False si hay éxito o error respectivamente

    //actualizar un registro //alternativa
    //primero buscar el registro que se quiere actualizar
    $personaObj = Personas::get($personaId);

    $personaObj->save([
        'nombre' => 'Edgard Baptista',
        'activo' => 0
    ]); //retorna True o False si hay éxito o error respectivamente


    //borrar un registro usando su clave primaria
    Personas::delete($personaId);
    

activerecord's People

Contributors

demonio avatar ebethus avatar emilio-rst avatar henrystivens avatar joanhey avatar manuelj555 avatar nelsonrojasn avatar scrutinizer-auto-fixer avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

activerecord's Issues

autoincrement pgsql

Php: 7.4-fpm
KumbiaPHP: 1.1.1
pgsql: postgres:11.5-alpine
servidor: nginx

cuando quiero usar el codigo con el LiteRecord
$class->create($dataSave);
tengo un error:
{"error":"SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column \"id\" violates not-null constraint\nDETAIL: Failing row contains (null, 01, Amazonas, 01, Chachapoyas, 11, Levanto, 2020-05-24 00:58:54, null)."}
adjunto imagen de la tabla.
imagen
el error ocurre porque LiteRecord le pone NULL a la ID que es autoincrement

Fatal error: Unsupported operand types in

Fatal error: Unsupported operand types in .../vendor/Kumbia/ActiveRecord/ActiveRecord.php on line 181

class Node extends ActRecord {
}

I trying execute this:

Node::allBy('id', 1);

or

Node::allBy('active', 1);

Error ActiveRecord

Al traer un proyecto previamente desarrollado con KumbiaPHP y montar el entorno de desarrollo, al iniciar sesion en el sistema aparece el mensaje:

"Fatal error: Declaration of Kumbia\ActiveRecord\ActiveRecord::all($params = Array, $values = Array) must be compatible with Kumbia\ActiveRecord\LiteRecord::all(string $sql = ", array $values = Array): array in /var/www/vendor/kumbia/activerecord/ActiveRecord.php on line 26"

El proyecto actualmente es funcional en entorno productivo, por lo cual si se copia el vendor de produccion a este entorno de desarrollo el sistema funciona correctamente.

compatibilidad con php 8.1

Hola buenas, quería saber si tiene compatibilidad con php 8.1 ya que por los commits es hasta julio de 2021
gracias

Error en método all() en LiteRecord Usando pgsql

SQLSTATE[08P01]: <>: 7 ERROR: bind message supplies 1 parameters, but prepared statement "pdo_stmt_00000002" requires 0 (08P01)

En el archivo C:\xampp\htdocs\bp\vendor\kumbia\activerecord\BaseRecord.php en la línea: 255

Evitar que el update ponga NULL a campos no pasados.

La función QueryGenerator::update genera la cadena UPDATE con todos los nombres de los campos que saca de la tabla y esto hace que si el campo no está definido en el objeto(LiteRecord) que se le está pasando lo ponga como NULL en la cadena borrando cualquier dato que haya registrado en la base de datos.

BaseRecord y valores de atributos protected

Cuando se realizan consultas, los objetos creados tienen almacenados sus valores en el atributo:

protected $values = [];

Lo que hace imposible su uso por ejemplo al usar el template csv de KumbiaPHP que contiene la función:

get_object_vars($key)

Esa función solo saca los valores de los atributos declarados como public.

No carga el id del objeto creado cuando se le pasa id vacio

Hola,

Se me presentó la siguente situación:

Estoy usando la misma vista para crear y editar una persona. Por lo tanto esta vista tiene oculto el campo persona.id (para usarlo cuando esté editando), al crear la persona lo hace correctamente pero el objeto creado se queda sin id:

<?php
//...
$persona = new Persona($data);

if($persona->create()){
    Logger::debug("Id de la persona: $persona->id");// Imprime: Id de la persona:
}

Donde $data son datos que viene por POST:
$data: Array ( [id] => [numero_identificacion] => 159632 [nombre] => John Doe )

Si al array $data le quitamos la clave 'id' antes de crearlo si le carga al objeto creado el id correspondiente.

Uso de composer genera ruta no válida en vendors

Al realizar el procedimiento indicado para instalar el veedor del nuevo ActiveRecord en vez de dejarlo en vendor/kumbia/activerecord/Kumbia/ActiveRecord en vez de dejarlo como vendor/Kumbia/ActiveRecord

Problemas al hacer insert con LiteRecord

Hago el contexto en primer lugar. Tenía una app más menos armada en beta2, pero quería saber qué tal iría al cargarla sobre 1.0rc. Estuve realizando arreglos principalmente en lo que respecta a las consultas (SELECT) sin mayores complicaciones, pero a la hora de intentar hacer el proceso de creación (INSERT) éstos no pasan. Por lo que pude revisar, la problemática es que me genera el campo id en la lista de valores a insertar, y no cuadra el número de atributos versus el número de valores. He revisado la tabla y ésta cuenta con la definición de clave primaria (en el campo id), y es autoincremental. De hecho, los insert funcionan a la perfección usando beta2, pero algo extraño sucede con PDO a la hora de calcular la lista de atributos que no deben contemplarse en el insert.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.