Documente Academic
Documente Profesional
Documente Cultură
Advertisement
Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 1/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
En esta serie Programando Con Yii2, estaré guiando a los lectores en el uso del
Framework Yii2 para PHP. En el tutorial de hoy, te guiaré en el uso del mapeo objeto-
relacional, conocido como ORM, para trabajar con bases de datos. Es llamado
ActiveRecord y es un aspecto clave de programar aplicaciones de base de datos
e cientemente en Yii.
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 2/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Yii ofrece diferentes maneras de trabajar con tu base de datos de manera programática,
tales como consultas directas y un constructor de consulta, pero usar ActiveRecord
ofrece un conjunto completo de bene cios para programación de base de datos orientada
a objetos. Tu trabajo se vuelve más e ciente, más seguro, trabaja dentro de la arquitectura
modelo vista controlador de Yii, y es portable si decides cambiar plataformas de base de
datos (ej. MySQL a PostgreSQL).
Sigue a la par mientras detallo los básicos de Active Record dentro de Yii.
Una clase Active Record es asociada con una tabla de base de
datos, una instancia Active Record corresponde a una fila de esa
tabla, y un atributo de una instancia Active Record representa el
valor de una columna particular en esa fila. En vez de escribir
declaraciones SQL crudas, podrías acceder atributos Active Record
y llamar métodos Active Record para acceder y manipular la
información almacenada en tablas de base de datos.
La integración del patrón Active Record en Yii es una gran fortaleza del framework, pero
común en la mayoría de frameworks tales como Ruby on Rails.
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 3/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 4/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Primero, déjame revisar como transformar un modelo Yii para sacar partido de Active
Record. Usaré un modelo de ejemplo que creé en la serie Construyendo tu Startup. Esa
serie te guía en cómo estoy construyendo mi startup, Plani cador de Reuniones, en Yii2.
Usaré el ejemplo de un modelo simple que creé llamado Launch, que permite a los
visitantes de la página principal proporcionar su dirección de correo si quieren ser
noti cados cuando el producto salga de la vista previa y sea liberado completamente.
Usando Active Record con un modelo es bastante simple; nota la class Launch extends
\yii\db\ActiveRecord :
01 <?php
02
03 namespace frontend\models;
04
05 use Yii;
06 use yii\db\ActiveRecord;
07
08
09 /**
10 * This is the model class for table "launch".
11 *
* @property integer $id
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 5/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
12 * @property integer $id
13 * @property string $email
14 * @property string $ip_addr
15 * @property integer $status
16 * @property integer $created_at
17 * @property integer $updated_at
18 */
19 class Launch extends \yii\db\ActiveRecord
20 {
21 const STATUS_REQUEST =0;
22 /**
23 * @inheritdoc
24 */
25 public static function tableName()
26 {
27 return 'launch';
28 }
Eso es todo.
Construyendo Consultas
Veamos algunas consultas Active Record comunes.
Registros Individuales
1 public function actionSomething($id)
2 {
3 $model = Launch::findOne($id);
Esto es idéntico a:
1 $model = Launch::find()
2 ‐>where(['id' => $id])
3 ‐>one();
También puedes extender el arreglo ‐>where con más campos o condiciones booleanas:
01 $model = Launch::find()
02 ‐>where(['id' => $id,'status'=>Launch::ACTIVE_REQUEST])
03 ...
04
05 //equivalent to
06 $model = Launch::find()
‐>where(['id' => $id)
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 6/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
07 ‐>where(['id' => $id)
08 ‐>andWhere(['status'=>Launch::ACTIVE_REQUEST])
09 ‐>orWhere(['status'=>Launch::FUTURE_REQUEST])
10 ...
Registros Múltiples
Aquí hay un ejemplo de encontrar todos los registros que empaten un status especí co
ordenado por $id :
1 $people = Launch::find()
2 ‐>where(['status' => Launch::STATUS_REQUEST])
3 ‐>orderBy('id')
4 ‐>all();
El ‐>all(); encuentra todos los registros en lugar de solo uno. La variable $people es
devuelta como un arreglo de objetos de modelo. De manera alternativa, cuando no hay
condiciones, puedes acceder a todos los registros con ‐>findAll();
Devolviendo un Arreglo
1 $people = Launch::find()
2 ‐>indexBy('id')
3 ‐>all();
1 $people = Launch::find()
2 ‐>asArray()
3 ‐>all();
Nota: La documentación de Yii dice, "Mientras este método guarda memoria y mejora
desempeño, es más cercano a la capa de abstracción DB más baja y perderás la mayoría
de características Active Record."
Contando Registros
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 7/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
1 $count = Launch::find()
2 ‐>where(['status' => Launch::STATUS_REQUEST])
3 ‐>count();
Uso contadores mucho en Plani cador de Reunión para estadísticas por ejemplo; aprende
más en nuestro episodio Dashboard:
1 // calculate $count_meetings_completed
2 $hd‐>count_meetings_completed = Meeting::find()‐>where(['status'=>Meeting::STATUS_COMPLETED])‐
3 // calculate $count_meetings_expired
4 $hd‐>count_meetings_expired = Meeting::find()‐>where(['status'=>Meeting::STATUS_EXPIRED])‐>and
5 // calculate $count_meetings_planning
6 $hd‐>count_meetings_planning = Meeting::find()‐>where('status<'.Meeting::STATUS_COMPLETED)‐>an
7 // calculate $count_places
8 $hd‐>count_places = Place::find()‐>where('created_at>'.$after)‐>andWhere('created_at<'.$since
1 $model = Launch::findOne($id);
2 $id = $model‐>id;
3 $email = $model‐>email;
1 $users = User::findAll();
2 foreach ($users as $u) {
3 $id = $u‐>id;
4 $email = $u‐>email;
Asignación Masiva
También puedes asignar rápidamente un arreglo a un registro modelo vía ActiveRecord:
1 $values = [
2 'name' => 'James',
3 'email' => 'james@example.com',
4 ];
5 $customer = new Customer();
6 $customer‐>attributes = $values;
7 $customer‐>save();
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 8/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
1 if (isset($_POST['FormName'])) {
2 $model‐>attributes = $_POST['FormName'];
3 if ($model‐>save()) {
4 // handle success
5 }
6 }
1 if ($model‐>load(Yii::$app‐>request‐>post()) && $model‐>save()) {
2 ...
3 }
Guardando Datos
Como puedes ver arriba, guardar datos con Active Record es sencillo también. En este
ejemplo de la documentación Yii, un nuevo registro es creado y guardado---y después el
registro es cargado por id, y las actualizaciones son guardadas:
01 // insert a new row of data
02 $customer = new Customer();
03 $customer‐>name = 'James';
04 $customer‐>email = 'james@example.com';
05 $customer‐>save();
06
07 // update an existing row of data
08 $customer = Customer::findOne(123);
09 $customer‐>email = 'james@newexample.com';
10 $customer‐>save();
Borrando Registros
Borrando un registro es incluso más fácil:
1 $u = User::findOne(99);
2 $u‐>delete();
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 9/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Actualizando Contadores
Yii también ofrece incrementos de contadores. Digamos que un usuario programa otra
reunión, y estoy dando seguimiento a cuantos en la tabla usuario:
1 $u = User::findOne(99);
2 $u‐>updateCounters(['meeting_count'=>1]);
3 // equivalent to
4 // UPDATE `User` SET `meeting_count` = `meeting_count` + 1 WHERE `id` = 99
Relaciones
Conectando tablas a lo largos de índices es una de las capacidades más poderosas de
Active Record. Por ejemplo, en Plani cador de Reuniones, cada reunión podría tener 0 o
más MeetingPlaces . El modelo Meeting.php de ne un ActiveQuery relacional para esto:
1 * @property MeetingPlace[] $meetingPlaces
2 /**
3 * @return \yii\db\ActiveQuery
4 */
5 public function getMeetingPlaces()
6 {
7 return $this‐>hasMany(MeetingPlace::className(), ['meeting_id' => 'id']);
8 }
Después, puedo acceder a todos los lugares de reunión con la propiedad $meetingPlaces .
Abajo, cargo una reunión e itero sobre todos sus meetingPlaces bastante sencillo ya que
fue un arreglo de sub-objetos integrado.
1 $mtg=Meeting::find()‐>where(['id'=>$meeting_id])‐>one();
2 foreach ($mtg‐>meetingPlaces as $mp) {
3 ...
4 }
Por supuesto, esto depende en crear una llave exterior cuando creas la tabla en su
migración:
01 $this‐>createTable('{{%meeting_place}}', [
02 'id' => Schema::TYPE_PK,
03 'meeting_id' => Schema::TYPE_INTEGER.' NOT NULL',
04 'place_id' => Schema::TYPE_INTEGER.' NOT NULL',
05 'suggested_by' => Schema::TYPE_BIGINT.' NOT NULL',
06 'status' => Schema::TYPE_SMALLINT . ' NOT NULL DEFAULT 0',
07 'created_at' => Schema::TYPE_INTEGER . ' NOT NULL',
'updated_at' => Schema::TYPE_INTEGER . ' NOT NULL',
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 10/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
08 'updated_at' => Schema::TYPE_INTEGER . ' NOT NULL',
09 ], $tableOptions);
10 $this‐>addForeignKey('fk_meeting_place_meeting',
11 '{{%meeting_place}}', 'meeting_id', '{{%meeting}}',
12 'id', 'CASCADE', 'CASCADE');
THE ONLY WORDPRESS
THEME YOU'LL EVER NEED!
Advertisement
Qué Sigue
Espero que esto te haya proporcionado una introducción sencilla de algunas de las
genialidades de Active Record. También incluye Ciclos de Vida, Transacciones, y Bloqueo,
sobre lo que podría escribir en el futuro. Si quieres continuar, Yii2 ofrece dos grandes
áreas para aprender más en su documentaicón: Guía Yii2 para Active Record y
Especi caciones funcionales Yii2 Active Record. Estas son introducciones bien escritas.
Si quisieras saber cuando llega el siguiente tutorial Yii2, sígueme en Twitter @reifman o
revisa mi página de instructor.
Enlaces Relacionados
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 11/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Cómo Programar Con Yii2: Trabajando Con la Base de Datos y Active Record (Envato
Tuts+)
Guía Yii2 para Active Record
Especi cación Funcional Yii2 Active Record
Patrón Active Record (Wikipedia)
Intercambio de Desarrollador Yii2, mi sitio de recursos Yii2
Advertisement
Jeff Reifman
Entrepreneur, technology writer
lookahead_io
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 12/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Email Address
Update me weekly
Advertisement
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 13/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Translations
Envato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Powered by
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 14/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Sponsored Links
Best Tracking Device Ever is Selling Like Crazy
TrackR Bravo
The 20 Most Generous Billionaires In The World
AfriZap
That's How You Find Cheap Flights
tripsinsider.com
Photos Inside Ivanka Trump's New Home Will Leave You Speechless
LifeDaily.com
Crazy Cheap Lighter Is Selling Like Hotcakes
Inferno Lighter
How a TOTAL beginner can speak a new language in just 3 weeks!
Babbel
0 Comments Tuts+ Hub
1 Login
Start the discussion…
Be the first to comment.
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 15/16
10/5/2017 Cómo Programar Con Yii2: ActiveRecord
Advertisement
ENVATO TUTS+
HELP
© 2017 Envato Pty Ltd. Trademarks and brands are the property of their respective owners.
https://code.tutsplus.com/es/tutorials/howtoprogramwithyii2activerecordcms27434 16/16