Por ejemplo, supongamos que Cliente es una clase Active Record que se asocia con la tabla de clientes y nombre es una columna de la tabla de clientes. Para insertar una nueva fila en la tabla Cliente escrbimos algo similar a:
$cliente = new Cliente();
$cliente->nombre = 'Juan';
$cliente->save();
El código anterior es equivalente a usar la siguiente declaración SQL para MySQL, que es menos intuitiva, más propensa a errores, y podemos tener incluso problemas de compatibilidad si utilizamos otro tipo de base de datos:
$db->createCommand('INSERT INTO `cliente` (`nombre`) VALUES (:nombre)', [
':nombre' => 'Juan',
])->execute();
Yii proporciona el soporte Active Record para las siguientes bases de datos relacionales:
- MySQL 4.1 o superior: via yii\db\ActiveRecord
- PostgreSQL 7.3 o superior: via yii\db\ActiveRecord
- SQLite 2 y 3: via yii\db\ActiveRecord
- Microsoft SQL Server 2008 o superior: via yii\db\ActiveRecord
- Oracle: via yii\db\ActiveRecord
- CUBRID 9.3 o superior: via yii\db\ActiveRecord (Se debe tener en cuenta que debido a un error en la extensión PDO, valores ente comillas no funcionan adecuadamente, por lo que se requiere tanto el cliente como el servidor de CUBRID 9.3)
- Sphinx: via yii\sphinx\ActiveRecord, requiere la extensión the yii2-sphinx
- ElasticSearch: via yii\elasticsearch\ActiveRecord, requiere la extensión the yii2-elasticsearch
Además, Yii también admite el uso de Active Record con las siguientes bases de datos NoSQL:
- Redis 2.6.12 o superior: vía yii\redis\ActiveRecord, requiere la extensión yii2-redis
- MongoDB 1.3.0 o superior: vía yii\mongodb\ActiveRecord, requiere la extensión yii2-mongodb
Declarando Clases Active Record
Una clase Active Record se declara extendiendo yii\db\ActiveRecord. Debido a que cada clase Active Record se asocia con una tabla de base de datos, en esta clase se debe sobrescribir el método tableName() para especificar a qué tabla la clase está asociada.En el siguiente ejemplo, declaramos una clase Cliente asociada a la tabla de base de datos cliente:
namespace app\models;
use yii\db\ActiveRecord;
class Cliente extends ActiveRecord{
const ESTADO_INACTIVO = 0;
const ESTADO_ACTIVO = 1;
/**
* @Retorna una cadena con el nombre de la tabla asociada a ésta clase ActiveRecord.
*/
public static function tableName()
{
return 'cliente';
}
}
Las instancias Active Record son consideradas como modelos. Por esta razón las colocamos bajo el nombre de espacio app\models.
Y puesto que, yii\db\ActiveRecord se extiende de yii\base\Model, hereda todas las características, tales como atributos, reglas de validación, serialización de datos, entre otros.
Conexión a Bases de Datos
De forma predeterminada, Active Record utiliza el componente de aplicación db como la conexión de base de datos para acceder y manipular los datos de la base de datos. El componente db se lo configura de manera similar a:return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=testdb',
'username' => 'demo',
'password' => 'demo',
],
],
];
Si requerimos de una conexión de base de datos diferente, debemos sobrescribir el método getDb():
class Cliente extends ActiveRecord{
// ...
public static function getDb()
{
// utiliza el componente "db2"
return \Yii::$app->db2;
}
}
También te puede interesar:
Trabajando con bases de datos
DAO - Database Access Objects (Objetos de acceso a base de datos)
Consulta de Datos
No hay comentarios.:
Publicar un comentario
Nota: sólo los miembros de este blog pueden publicar comentarios.