spadefoot / kohana-orm-leap

An ORM module for the Kohana PHP framework that is designed to work with all major databases.
http://spadefoot.github.io/kohana-orm-leap/
100 stars 25 forks source link

Como insertar usando el DB_Connection_Pool #85

Closed narucho closed 11 years ago

narucho commented 11 years ago

Hola un placer, disculpa tengo una duda deje de lado un rato esto de leap y kohana, ando retomando esto, mira buscando informacion quisiera hacer un insert con un simple query pero no se como quedaria el script podrias orientarme? Segun yo quedaria el query asi:

muchas gracias por tu ayuda.

bluesnowman commented 11 years ago

La función "$connection->execute($sql)" no devuelve nada, pero puedes obtener la ultima ID de inserto con $connection->get_last_insert_id(). Hay una función en Base_DB_SQL_Insert_Proxy que tiene un examplo.

jsand commented 11 years ago

Nunca uso DB_Connection_Pool, pero esa linia luce correcto. Quizas "$results = $connection->query($sql)" en lugar de "$results = $connection->execute($sql)" es lo que quieres. No te olvides $connection->open()!

I hope that made sense. :)

2013/1/23 narucho notifications@github.com

Hola un placer, disculpa tengo una duda deje de lado un rato esto de leap y kohana, ando retomando esto, mira buscando informacion quisiera hacer un insert con un simple query pero no se como quedaria el script podrias orientarme? Segun yo quedaria el query asi:

  • $connection = DB_Connection_Pool::instance()->get_connection('default');
  • $sql = "INSERT INTO tabla (datos) value(valores)";
  • $results = $connection->execute($sql);
  • if ($results->count()>0){ echo 'Se inserto con exito'; }
  • $connection->close();

muchas gracias por tu ayuda.

— Reply to this email directly or view it on GitHubhttps://github.com/spadefoot/kohana-orm-leap/issues/85.

bluesnowman commented 11 years ago

No es necesario cerrer la conexion porque DB_Connection_Pool la gestiona. Para insertar, trata de usar esto examplo:

$connection = DB_Connection_Pool::instance()->get_connection('default');
$sql = 'INSERT INTO tabla (datos) value(valores)';
$connection->execute($sql);

o

$connection = DB_Connection_Pool::instance()->get_connection('default');
$sql = 'INSERT INTO tabla (datos) value(valores)';
$connection->execute($sql);
$id = $connection->get_last_insert_id();
$connection->close();

Para selectar, puedes usar la funcion "query" como asi:

$connection = DB_Connection_Pool::instance()->get_connection('default');
$sql = 'SELECT * FROM tabla;';
$records = $connection->query($sql);
foreach ($records as $record) {
    echo Debug::vars($record);
}

o puedes usar la funcion "reader" como asi:

$connection = DB_Connection_Pool::instance()->get_connection('default');
$sql = 'SELECT * FROM tabla;';
$reader = $connection->reader($sql);
while ($reader->read()) {
    $record = $reader->row();
    echo Debug::vars($record);
}
narucho commented 11 years ago

Hola les doy las gracias me sirvio mucho su ayuda, si con usar $connection->execute($sql); pude insertar la info que quiero, pero me salio un detalle, cuando llega a $id = $connection->get_last_insert_id();. Sale este error:

Hice esto: -if (!$connection->execute($sql)){ echo "se inserto correctamente"; } else { echo "no se inserto"; } Y con eso lo solucione, les agradezco mucho su atencion :+1: PD: Para el delete es igual que el insert me supongo. Gracias de nuevo.

bluesnowman commented 11 years ago

La funcion "get_last_insert_id()" solamente funciona con ID's que son numeros en Oracle y tu tabla tiene que tener un "trigger" como asi:


-- Auto-increment the "roles" table (see, http://earlruby.org/2009/01/creating-auto-increment-columns-in-oracle/)

CREATE SEQUENCE "roles_id_seq" START WITH 1 INCREMENT BY 1;

CREATE TRIGGER "roles_id_trig" BEFORE INSERT ON "roles" FOR EACH ROW DECLARE max_id NUMBER; cur_seq NUMBER; BEGIN IF :new.id IS NULL THEN -- No ID passed, get one from the sequence SELECT "roles_id_seq".nextval INTO :new.id FROM dual; ELSE -- ID was set via insert, so update the sequence SELECT greatest(nvl(max(id),0), :new.id) INTO max_id FROM "roles"; SELECT "roles_id_seq".nextval INTO cur_seq FROM dual; WHILE cur_seq < max_id LOOP SELECT "roles_id_seq".nextval INTO cur_seq FROM dual; END LOOP; END IF; END;