git clone https://github.com/ErickZH/retoTWGroup.git
cd retoTWGroup
composer install && npm install
cp .env.example .env
php artisan key:generate
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=twgroup
DB_USERNAME=root
DB_PASSWORD=
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="${APP_NAME}"
php artisan migrate
npm run dev
.\vendor\bin\phpunit
php artisan serve
- Al momento de iniciar un nuevo proyecto en Laravel debemos realizar una serie de pasos para configurar el proyecto dependiendo de sus requerimientos. Imagina que necesitamos una plataforma sobre Laravel que utilizará un motor de base de datos MySQL/MariaDB, un servidor de correos SMTP y un servidor Redis.
- ¿Cuáles son los pasos que consideras necesarios para dejar la aplicación funcionando en modo de desarrollo? (Describe los comandos necesarios que ejecutarías y que archivos modificarías en base a los requerimientos mencionados).
- Respuesta:
Generar el key de la aplicación php artisan key:generate
Editar el archivo .env para configurar la conexión a la base de datos
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
Las anteriores keys se utilizan para establecer la conexión a la base de datos, donde:
DB_CONNECTION establece el tipo de conexión en este caso mysql puede ser sqlite, pgsql o sqlsrv
DB_HOST establece dominio donde esta alojada la base de datos en este caso será localhost o 127.0.0.1
DB_PORT establece el puerto que utiliza base de datos en este caso es 3306
DB_DATABASE establece el nombre de la base de datos por default es laravel
DB_USERNAME establece el nombre de usuario de la base de datos por default es root
DB_PASSWORD establece la contraseña de la base de datos
Configurar un servidor de correos SMPT Debemos editar las siguientes keys que se encuentran en el archivo .env
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
Para entorno de desarrollo laravel por default utiliza mailtrap como servidor de correos SMPT. Solo basta con crear una cuenta en https://mailtrap.io/ y copiar y pegar las credenciales que nos ofrece mailtrap.
Donde:
MAIL_MAILER Indica el tipo de mailer a utilizar, por ejemplo: smtp, sendmail, mailgun, ses, postmark, log o array.
MAIL_HOST Indica el dominio del servicio de mail
MAIL_PORT Indica el puerto de conexión del servicio de mail
MAIL_USERNAME Indica el nombre de usuario que se utilizara para establecer la conexión con el servicio de mail
MAIL_PASSWORD Indica la contraseña del usuario que se utilizara para establecer la conexión con el servicio de mail
MAIL_ENCRYPTION Indica el tipo de encriptación tls o tcp
MAIL_FROM_ADDRESS Indica la dirección de correo electronico que se utiliza para el "From" este será usado por todos los mails que se envien
MAIL_FROM_NAME Indica el nombre para el "From" que será utilizado en todos los mails que se envien
Configurar Redis
-
Antes de utilizar Redis en Laravel, se recomienda instalar el servidor de redis en nuestro sistema operativo.
-
Instalar la extensión predis para admitir las operaciones de Redis, ejecutar el siguiente comando.
composer require predis/predis
La configuración de redis está ubicada en el archivo de cofiguración config/database. Dentro de este archivo, econtraremos el arreglo redis que contiene los servidores de Redis utilizados por la aplicación. La configuración del servidor por defecto es suficiente para el entorno de desarrollo.
Laravel cuenta con un ORM llamado Eloquent, este ORM nos permite simplificar las consultas a la base de datos, imagina los siguientes modelos con los siguientes atributos.
- Publication (id, title, content, user_id)
- Comment (id, publication_id, content, status)
Imagina que existe la relación "Una publicación puede tener 0 o más comentarios", ¿Cómo definirías las funciones de relación en ambos modelos?
App\Publication.php
/**
* Define a one-to-many relationship.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function comments(): HasMany
{
return $this->hasMany(Comment::class);
}
App\Comment.php
/**
* Define an inverse one-to-one or many relationship.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function publication(): BelongsTo
{
return $this->belongsTo(Publication::class);
}
Imaginando los modelos anteriormente mencionados, crea una Query en Eloquent (Obligatorio) que obtenga: Todas las publicaciones que contengan comentarios con la palabra "Hola" en su contenido, y que además posean status "APROBADO".
Publication::with(['comments' => function ($query) {
$query->where('comments.content', 'like', '%Hola%')
->where('comments.status', 'APROBADO');
}])->get();
En Laravel existen las migraciones, en base a tu experiencia ¿Cuáles son las ventajas que nos entrega el uso de migraciones en una aplicación Laravel funcionando en un servidor de producción?
Las ventajas de utilizar migraciones en Laravel en un ambiente de producción yo creo que son las siguientes.
- Podemos agregar nuevas tablas a la base de datos
- Agregar y modificar columnas
- Modificar el tipo de datos de las columnas
- Podemos hacer un rollback de cierto número de migraciones
- Podemos agregar nuevos indexes
- Podemos agregar llaves foraneas