{"id":54782,"date":"2022-07-20T09:36:46","date_gmt":"2022-07-20T07:36:46","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=54782&#038;post_type=knowledgebase&#038;preview_id=54782"},"modified":"2025-10-01T21:31:57","modified_gmt":"2025-10-01T19:31:57","slug":"base-de-datos-de-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/","title":{"rendered":"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente"},"content":{"rendered":"<p>Los problemas de exactitud y consistencia de los datos pueden dar lugar a todo tipo de problemas, desde peque\u00f1os inconvenientes hasta grandes problemas corporativos. Es fundamental crear un c\u00f3digo que almacene, modifique y borre de forma segura los datos de tu base de datos.<\/p>\n<p>Entra en las transacciones de la base de datos de Laravel.<\/p>\n<p>Las transacciones de base de datos son un enfoque eficaz para garantizar la integridad de los datos. Laravel simplifica estas transacciones en una amplia gama de bases de datos.<\/p>\n<p>Pero, \u00bfqu\u00e9 son exactamente? \u00bfC\u00f3mo puedes realizarlas en Laravel?<\/p>\n\n<p>Al final de esta extensa gu\u00eda, habr\u00e1s aprendido todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas eficazmente en tu proyecto.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>\u00bfQu\u00e9 Son las Transacciones de Base de Datos en Laravel?<\/h2>\n<p>Antes de entrar en la parte t\u00e9cnica, vamos a entender primero qu\u00e9 son las transacciones de <a href=\"https:\/\/kinsta.com\/es\/blog\/bases-de-datos-de-codigo-abierto\/\">base de datos<\/a> de Laravel y c\u00f3mo puedes beneficiarte de ellas.<\/p>\n<p>Una transacci\u00f3n de base de datos es un conjunto de operaciones que puedes realizar de forma segura dentro de la estructura de la base de datos de tu aplicaci\u00f3n, como consultas SQL para modificar datos (por ejemplo, actualizaciones, eliminaciones e inserciones).<\/p>\n<p>En cualquier momento, puedes decidir deshacer todas las consultas de la transacci\u00f3n. Adem\u00e1s, todas las consultas que realices ser\u00e1n tratadas como una \u00fanica acci\u00f3n por la base de datos.<\/p>\n<p>Veamos un ejemplo de esto.<\/p>\n<p>Supongamos que tenemos una aplicaci\u00f3n que permite a los usuarios crear cuentas. Naturalmente, puede haber uno o varios usuarios asociados a cada cuenta.\u00a0Si esta aplicaci\u00f3n genera simult\u00e1neamente una cuenta y el primer usuario, tendr\u00e1s que resolver lo que ocurre si una cuenta se genera correctamente, pero el usuario no.<\/p>\n<p>Echa un vistazo a este c\u00f3digo de ejemplo:<\/p>\n<pre><code class=\"language-php\">\/\/ Create Account\n$newAcct = Account::create([\n  'accountname' =&gt; Input::get('accountname'),\n]);\n\n\/\/ Create User\n$newUser = User::create([\n  'username' =&gt; Input::get('username'),\n  'account_id' =&gt; $newAcct-&gt;id,\n]);<\/code><\/pre>\n<p>Aqu\u00ed hay dos escenarios que pueden causar problemas desagradables:<\/p>\n<ol>\n<li>La cuenta no se genera<\/li>\n<li>Fallo en la creaci\u00f3n de un usuario<\/li>\n<\/ol>\n<p>Consideremos la \u00faltima situaci\u00f3n.<\/p>\n<p>Tener una cuenta sin usuarios disponibles conduce a la inconsistencia de los datos en la base de datos. Para solucionarlo, puedes optar por la desalentadora tarea de programar para evitarlo o ahorrarte mucho c\u00f3digo o simplemente empaquetarlo en una transacci\u00f3n para hacer las cosas r\u00e1pidamente.<\/p>\n<p>Aunque las transacciones de base de datos est\u00e1n presentes en la mayor\u00eda de las bases de datos SQL, var\u00edan principalmente en su implementaci\u00f3n y eficiencia. Los sistemas m\u00e1s populares, como <a href=\"https:\/\/kinsta.com\/es\/blog\/mysql-rendimiento-ajuste\/\" rel=\"noopener\">MySQL<\/a>, SQLite, <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-postgresql\/\" rel=\"noopener\">PostgreSQL<\/a> y Oracle, admiten transacciones, por lo que no deber\u00edas tener problemas para implantar tu base de datos SQL preferida.<\/p>\n<h3>Migraciones<\/h3>\n<p>La migraci\u00f3n es una funcionalidad crucial en <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-laravel\/\" rel=\"noopener\">Laravel<\/a> que te permite crear una tabla en tu base de datos, hacer modificaciones y compartir el esquema de la base de datos de la aplicaci\u00f3n. Puedes utilizar la migraci\u00f3n de Laravel para editar tablas a\u00f1adiendo nuevas columnas o eliminando las existentes.<\/p>\n<p>Imaginemos que est\u00e1s <a href=\"https:\/\/kinsta.com\/es\/blog\/slack-vs-discord\/\" rel=\"noopener\">discutiendo ideas con un equipo<\/a> y necesitas hacer ajustes en la tabla. El archivo SQL debe ser compartido e importado por alguien del equipo. Es posible que se olviden de importar el archivo SQL, causando problemas en el funcionamiento de la aplicaci\u00f3n.<\/p>\n<p>Aqu\u00ed es donde la migraci\u00f3n de Laravel viene al rescate. Puedes a\u00f1adir una nueva columna a tu base de datos o eliminar entradas sin afectar a las que ya est\u00e1n ah\u00ed.<\/p>\n<h3 id=\"seeders\" class=\"has-anchor-hash\">Sembradores<\/h3>\n<p>El sembrado es una herramienta proporcionada por <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-9\/\" rel=\"noopener\">Laravel<\/a> para que los desarrolladores puedan facilitar la prueba de diferentes tipos de datos, corregir errores y ajustar el rendimiento. Puedes a\u00f1adir m\u00faltiples filas de datos ficticios autom\u00e1ticamente a tu tabla de base de datos a trav\u00e9s del sembrado de la base de datos en un solo comando.<\/p>\n<p>Como resultado, puedes empezar de nuevo con una nueva base de datos y valores de muestra en lugar de tener que introducirlos manualmente cada vez que se restaura la base de datos.<\/p>\n<h2>Opciones para las Transacciones de la Base de Datos de Laravel<\/h2>\n<p>Laravel ofrece diferentes herramientas como <a href=\"https:\/\/kinsta.com\/es\/blog\/adminer\/\" rel=\"noopener\">Adminer<\/a> para gestionar tus datos. Para las transacciones de la base de datos, hay tres m\u00e9todos en la parte de la base de datos para iniciar una transacci\u00f3n manualmente y tener un control total sobre la gesti\u00f3n de las transacciones.<\/p>\n<p>Muchos usuarios encuentran estas opciones m\u00e1s flexibles para definir exactamente cu\u00e1ndo se debe confirmar o revertir una transacci\u00f3n:<\/p>\n<ul>\n<li><strong>Crea una transacci\u00f3n:<\/strong> Utiliza el comando <code>DB::beginTransaction();<\/code> para iniciar una transacci\u00f3n.<\/li>\n<li><strong>Deshacer una transacci\u00f3n:<\/strong> Utiliza el comando <code>DB::rollBack();<\/code> si quieres realizar cambios o deshacer acciones.<\/li>\n<li><strong>Confirmar una transacci\u00f3n:<\/strong> Si todo ha ido seg\u00fan lo previsto, utiliza el comando <code>DB::commit();<\/code>.<\/li>\n<\/ul>\n<p>Recuerda siempre concluir cada transacci\u00f3n abierta con una acci\u00f3n de consignaci\u00f3n o de reversi\u00f3n, especialmente los bucles. De lo contrario, este m\u00e9todo manual se desincronizar\u00e1 y tus registros no se actualizar\u00e1n.<\/p>\n<h2>C\u00f3mo Trabajar con tu Base de Datos Laravel<\/h2>\n<p>Las migraciones y los seeders, como se ha mencionado anteriormente, son soluciones sofisticadas dise\u00f1adas para que <a href=\"https:\/\/kinsta.com\/es\/blog\/salario-desarrolladores-laravel\/\" rel=\"noopener\">los desarrolladores de Laravel<\/a> puedan desplegar, eliminar y restaurar r\u00e1pidamente la base de datos de una aplicaci\u00f3n reduciendo las disparidades. Resulta muy \u00fatil, especialmente cuando m\u00e1s de un desarrollador trabaja en la misma aplicaci\u00f3n.<\/p>\n<p>Esta secci\u00f3n te mostrar\u00e1 c\u00f3mo utilizar f\u00e1cilmente las migraciones y los seeders con tu base de datos de Laravel utilizando los comandos de artisan.<\/p>\n<h3>Requisitos Previos<\/h3>\n<p>Esto es lo que necesitas para empezar:<\/p>\n<ol>\n<li>Un usuario no root con permisos sudo en un ordenador local de Ubuntu 18.04 o en un servidor de desarrollo. Es una buena idea tener <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-un-cortafuegos\/\">configurado un cortafuegos activo<\/a> si utilizas un servidor remoto.<\/li>\n<li>LEMP instalado en tu m\u00e1quina. Puedes optar por instalar Docker y Docker Compose para ejecutar tu aplicaci\u00f3n si te sientes m\u00e1s c\u00f3modo trabajando con ellos.<\/li>\n<\/ol>\n<p>Nuestra herramienta <a href=\"https:\/\/kinsta.com\/es\/devkinsta\/\" rel=\"noopener\">DevKinsta<\/a> est\u00e1 impulsada por Docker y es utilizada por 60.000+ desarrolladores y dise\u00f1adores para crear y desarrollar f\u00e1cilmente <a href=\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-wordpress\/\" rel=\"noopener\">sitios de WordPress<\/a> individuales o m\u00faltiples.<\/p>\n<p>Hay otras <a href=\"https:\/\/kinsta.com\/es\/blog\/herramientas-desarrollo-web\/\" rel=\"noopener\">herramientas de desarrollo<\/a> web que puedes utilizar en funci\u00f3n de tus habilidades y necesidades de codificaci\u00f3n.<\/p>\n<h3>Migraciones de Laravel<\/h3>\n<p>Hay dos m\u00e9todos en una categor\u00eda de migraci\u00f3n: de subida y de bajada. El m\u00e9todo de subida se utiliza para crear nuevas tablas, \u00edndices o columnas en la base de datos. El m\u00e9todo de bajada debe deshacer los efectos del m\u00e9todo de subida.<\/p>\n<p>Puedes utilizar el constructor de esquemas de Laravel para construir y editar tablas libremente en cada uno de estos m\u00e9todos. Por ejemplo, esta migraci\u00f3n genera una tabla de vuelos:<\/p>\n<pre><code class=\"language-php\">use IlluminateDatabaseMigrationsMigration;\nuse IlluminateDatabaseSchemaBlueprint;\nuse IlluminateSupportFacadesSchema;\n\nclass CreateFlightsTable extends Migration {\n\/**\n* Run the migrations.\n*\n* @return void\n*\/\n\npublic function up() {\n  Schema::create('flights', function (Blueprint $table) {\n    $table-&gt;bigIncrements('id');\n    $table-&gt;string('name');\n    $table-&gt;string('airline');\n    $table-&gt;timestamps();\n  });\n}\n\n\/**\n* Reverse the migrations.\n*\n* @return void\n*\/\n\npublic function down() {\n  Schema::drop('flights');\n}<\/code><\/pre>\n<p>Ten en cuenta que los comandos <code>make:migration<\/code> necesitan aclarar el nombre de la tabla. As\u00ed que aseg\u00farate de que el <code>table_name<\/code> coincide con lo que quieres.<\/p>\n<p>Puedes utilizar las opciones <code>--table<\/code> y <code>--create<\/code> para especificar el nombre de la tabla y si la migraci\u00f3n crear\u00e1 una nueva tabla, como se muestra a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-php\">php artisan make:migration create_users_table --create=users<\/code><\/pre>\n<pre><code class=\"language-php\">php artisan make:migration add_votes_to_users_table --table=users<\/code><\/pre>\n<p>Tu directorio <strong>database\/migrations<\/strong>\u00a0incluir\u00e1 ahora la nueva migraci\u00f3n. El nombre de cada archivo de migraci\u00f3n incluye una marca de tiempo, que Laravel utiliza para determinar el orden de la migraci\u00f3n.<\/p>\n<p>Tambi\u00e9n tienes la opci\u00f3n de definir un <code>--path<\/code>, que debe estar relacionado con el directorio root de tu instalaci\u00f3n. Utiliza el siguiente comando:<\/p>\n<pre><code class=\"language-php\">php artisan migrate:make foo --path=app\/migrations<\/code><\/pre>\n<h4>Ejecutar Migraciones<\/h4>\n<p>Hay algunos comandos \u00fatiles que puedes aprovechar al ejecutar migraciones. Vamos a repasar algunos de ellos:<\/p>\n<ul>\n<li><strong><code>php artisan migrate<\/code>:<\/strong> Este comando publica todo tu esquema en la base de datos. Tambi\u00e9n genera una tabla en la base de datos.<\/li>\n<li><strong><code>php artisan migrate --path=app\/foo\/migrations<\/code>:<\/strong> Este comando ejecuta todas las migraciones bajo un directorio. Si recibes un mensaje de error \u00abNo hay nada que migrar\u00bb, ejecuta el comando <code>php artisan migrate --path=database\/migrations\/foo<\/code> sin el directorio de <strong>la aplicaci\u00f3n<\/strong>.<\/li>\n<li><strong><code>php artisan migrate --package=vendor\/package<\/code>:<\/strong> Utiliza este comando si quieres ejecutar las migraciones de un paquete.<\/li>\n<\/ul>\n<p>A veces puedes obtener un error \u00abClase no encontrada\u00bb al ejecutar migraciones. Si te ocurre, ejecuta el comando <code>composer dump-autoload<\/code>.<\/p>\n<p>Algunas migraciones pueden ser peligrosas y pueden provocar la p\u00e9rdida de tus datos. Por ello, Laravel te pedir\u00e1 que confirmes la ejecuci\u00f3n de los comandos para salvaguardar tus datos.<\/p>\n<p>Si no quieres que te pregunte, utiliza <code>--force flag<\/code> para forzar los comandos de la siguiente manera:<\/p>\n<pre><code class=\"language-php\">php artisan migrate --force<\/code><\/pre>\n<h4>Deshacer las Migraciones<\/h4>\n<p>Utiliza el comando de retroceso cuando necesites revertir el \u00faltimo lote de migraciones de la siguiente manera:<\/p>\n<pre><code class=\"language-php\">php artisan migrate:rollback<\/code><\/pre>\n<p>Aqu\u00ed tienes otros comandos de retroceso que puedes utilizar:<\/p>\n<ul>\n<li><strong><code>php artisan migrate:reset<\/code>:<\/strong> Este comando revierte todas las migraciones, no s\u00f3lo la \u00faltima operaci\u00f3n.<\/li>\n<li><strong><code>php artisan migrate:fresh<\/code>:<\/strong> Utiliza este comando cuando quieras una nueva instalaci\u00f3n de tu base de datos. Elimina todas las tablas existentes y ejecuta el comando <code>migration<\/code>.<\/li>\n<li><strong><code>php artisan migrate:refresh<\/code>:<\/strong> Este es un comando dos en uno que ejecuta los dos comandos <code>:rollback and migrate<\/code>.<\/li>\n<li><strong><code>php artisan migrate:fresh --seed<\/code>:<\/strong> Esto ejecuta el comando <code>migrate:fresh<\/code> antes de sembrar la base de datos. Cuando instales la aplicaci\u00f3n en un nuevo host, puedes utilizar este comando para sembrar (es decir, cargar datos en) la base de datos.<\/li>\n<\/ul>\n<h3 id=\"seeders\" class=\"has-anchor-hash\">Seeders de Laravel<\/h3>\n<p>Un seeder (Alimentador o Sembrador) es una clase que crea y coloca muestras de datos (semillas) en una base de datos. Laravel proporciona una t\u00e9cnica sencilla para sembrar tu base de datos con datos de prueba utilizando clases sembradoras en el directorio <strong>database\/seeds<\/strong>.<\/p>\n<p>Eres libre de elegir el nombre de tus clases semilla. Pero te aconsejamos que sigas un patr\u00f3n de nomenclatura claro de tu elecci\u00f3n, como <em>UsersTableSeeder<\/em>. Despu\u00e9s, se crear\u00e1 por defecto una clase <code>DatabaseSeeder<\/code> para ti.<\/p>\n<p>Aqu\u00ed tienes un ejemplo de clase semilla de base de datos en Laravel:<\/p>\n<pre><code class=\"language-php\">class DatabaseSeeder extends Seeder {\n  public function run() {\n    $this-&gt;call('UserTableSeeder');\n    $this-&gt;command-&gt;info('User table seeded!');\n  }\n}\nclass UserTableSeeder extends Seeder {\n  public function run() {\n    DB::table('users')-&gt;delete();\n    User::create(array('email' =&gt; 'foo@bar.com'));\n  }\n}<\/code><\/pre>\n<h4>Creaci\u00f3n de un Seeder (Sembrador)<\/h4>\n<p>Generar sembradores es muy f\u00e1cil. Podr\u00edas hacerlo con los ojos cerrados (pero, por favor, no lo hagas).<\/p>\n<p>Ejecuta el comando <code>make:seeder<\/code> artisan para crear un sembrador. Ahora el directorio <strong>database\/seeds<\/strong>\u00a0incluir\u00e1 todos los sembradores producidos por el marco:<\/p>\n<pre><code class=\"language-php\">php artisan make:seeder UsersTableSeeder<\/code><\/pre>\n<p>El m\u00e9todo por defecto de una clase de sembrador es ejecutar. El proceso tiene lugar cuando aplicas el comando <code>db:seed<\/code> artisan. Puedes introducir los datos en tu base de datos de la forma que prefieras utilizando la funci\u00f3n de ejecuci\u00f3n. Adem\u00e1s, es perfectamente posible utilizar Eloquent model factories o Query Builder para insertar datos manualmente.<\/p>\n<p>En cualquier caso, debes tener en cuenta que durante la introducci\u00f3n de datos en la base de datos, la protecci\u00f3n de la asignaci\u00f3n masiva se desactiva autom\u00e1ticamente.<\/p>\n<p>En este caso, haremos modificaciones en la clase b\u00e1sica <code>DatabaseSeeder<\/code> y a\u00f1adiremos una sentencia de inserci\u00f3n en la base de datos al m\u00e9todo de ejecuci\u00f3n:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse IlluminateDatabaseSeeder;\nuse IlluminateSupportFacadesDB;\nuse IlluminateSupportFacadesHash;\nuse IlluminateSupportStr;\n\nclass DatabaseSeeder extends Seeder {\n  \/**\n  * Run the database seeds.\n  *\n  * @return void\n  *\/\n  public function run() {\n    DB::table('users')-&gt;insert([\n      'name' =&gt; Str::random(10),\n      'email' =&gt; Str::random(10).'@gmail.com',\n      'password' =&gt; Hash::make('password'),\n    ]);\n  }\n}<\/code><\/pre>\n<p>Si quieres escribir alguna dependencia dentro del c\u00f3digo del m\u00e9todo de ejecuci\u00f3n, el contenedor de servicios de Laravel la resolver\u00e1 autom\u00e1ticamente.<\/p>\n<p>Adem\u00e1s, puedes utilizar la funci\u00f3n <code>call<\/code> para ejecutar diferentes clases de siembra desde esta clase, lo que te permite personalizar el orden de siembra. Puedes dividir la siembra de tu base de datos en diferentes archivos, asegurando que ninguna clase sembradora se expanda excesivamente.<\/p>\n<p>Introduce el nombre de la clase sembradora que quieras utilizar, como se muestra a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-php\">\/**\n* Run the database seeds.\n*\n* @return void\n*\/\npublic function run() {\n  $this-&gt;call([\n    UsersTableSeeder::class,\n    PostsTableSeeder::class,\n    CommentsTableSeeder::class,\n  ]);\n}<\/code><\/pre>\n<h4>Ejecutar Seeders (Sembradoras)<\/h4>\n<p>Despu\u00e9s de generar tu sembradora, es posible que tengas que utilizar el comando <code>dump-autoload<\/code> para volver a crear el autocargador de Composer:<\/p>\n<pre><code class=\"language-php\">composer dump-autoload<\/code><\/pre>\n<p>A continuaci\u00f3n, debes ejecutar el comando <code>db:seed<\/code> artisan para sembrar tu base de datos:<\/p>\n<pre><code class=\"language-php\">php artisan db:seed<\/code><\/pre>\n<p>Este comando ejecuta la clase <code>DatabaseSeeder<\/code> por delegaci\u00f3n, que puede utilizarse para ejecutar otras clases sembradoras. Sin embargo, puedes utilizar el par\u00e1metro <code>--class<\/code> para ejecutar una clase sembradora concreta por separado, como se indica a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-php\">php artisan db:seed --class=UserTableSeeder<\/code><\/pre>\n<p>\u00bfY si quieres volver a crear tu base de datos desde cero, incluyendo la eliminaci\u00f3n de todas las tablas y la ejecuci\u00f3n de todas las migraciones una vez m\u00e1s? En este caso, utiliza el comando <code>migrate:fresh<\/code> para sembrar tu base de datos.<\/p>\n<pre><code class=\"language-php\">php artisan migrate:fresh --seed<\/code><\/pre>\n<p>Como ocurre con las migraciones, algunos procesos de sembrado pueden provocar p\u00e9rdidas de datos o cambios no deseados. Por esta raz\u00f3n, se te pedir\u00e1 la aprobaci\u00f3n antes de ejecutar los sembradores para protegerte de la ejecuci\u00f3n de comandos de sembrado en tu base de datos principal.<\/p>\n<p>Si est\u00e1s lo suficientemente seguro y no quieres que te interrumpa ese paso de seguridad, utiliza la bandera <code>--force<\/code> que aparece a continuaci\u00f3n:<\/p>\n<pre><code class=\"language-php\">php artisan db:seed --force<\/code><\/pre>\n<h2>5 Formas M\u00e1s De Usar Consultas De Base De Datos Raw en Laravel<\/h2>\n<p>Aunque Laravel proporciona herramientas \u00fatiles como Eloquent y Query Builder, todav\u00eda puedes realizar consultas raw utilizando SQL. Hemos reunido cinco formas diferentes de hacerlo.<\/p>\n<p>Pero antes de empezar, debes saber que las consultas raw no est\u00e1n aseguradas autom\u00e1ticamente, lo que las convierte en un enfoque arriesgado. Por lo tanto, si vas a dar alg\u00fan par\u00e1metro a la consulta, aseg\u00farate de que est\u00e1 en el formato correcto y tiene los valores adecuados, como un n\u00famero en lugar de un texto.<\/p>\n<h3>C\u00e1lculos de Media\/Suma\/Conteo<\/h3>\n<p>Puedes utilizar una consulta sin procesar si quieres crear <code>GROUP BY ()<\/code>, y luego utilizar las funciones de agregaci\u00f3n de <a href=\"https:\/\/kinsta.com\/es\/blog\/mongodb-vs-mysql\/\" rel=\"noopener\">MySQL<\/a> como <code>Count()<\/code>, <code>SUM()<\/code>, <code>AVG()<\/code>, <code>MIN()<\/code> o <code>MAX()<\/code> como se muestra en el siguiente ejemplo:<\/p>\n<pre><code class=\"language-php\">$users = DB::table('users')\n  -&gt;selectRaw('count(*) as user_count, status')\n  -&gt;where('status', '&lt;&gt;', 1)\n  -&gt;groupBy('status')\n  -&gt;get();<\/code><\/pre>\n<p>Incluso es posible hacer tanto <code>count()<\/code> como <code>avg()<\/code> en la misma consulta SQL:<\/p>\n<pre><code class=\"language-php\">$salaries = DB::table('salaries')\n  -&gt;selectRaw('companies.name as company_name, avg(salary) as avg_salary, count(*) as people_count')\n  -&gt;join('companies', 'salaries.company_id', '=', 'companies.id')\n  -&gt;groupBy('companies.id')\n  -&gt;orderByDesc('avg_salary')\n  -&gt;get();<\/code><\/pre>\n<h3>Filtrar A\u00f1os<\/h3>\n<p>Si necesitas realizar c\u00e1lculos SQL dentro de <code>GROUP BY<\/code> o <code>ORDER BY<\/code>, puedes utilizar las consultas <code>groupByRaw()<\/code> y <code>orderByRaw()<\/code>. Despu\u00e9s de la agrupaci\u00f3n, tambi\u00e9n puedes utilizar la sentencia <code>where<\/code> utilizando una consulta SQL <code>having<\/code> con <code>havingRaw ()<\/code>.<\/p>\n<p>Por ejemplo, este comando de abajo muestra c\u00f3mo agrupar un campo de fecha\/hora por a\u00f1o:<\/p>\n<pre><code class=\"language-php\">$results = User::selectRaw('YEAR(birth_date) as year, COUNT(id) as amount')\n  -&gt;groupByRaw('YEAR(birth_date)')\n  -&gt;havingRaw('YEAR(birth_date) &gt; 2000')\n  -&gt;orderByRaw('YEAR(birth_date)')\n  -&gt;get();<\/code><\/pre>\n<h3>Calcular Un Solo Campo (Subconsulta)<\/h3>\n<p>Sup\u00f3n que quieres calcular una columna a partir de otra y devolver el resultado en una consulta SQL. \u00bfC\u00f3mo puedes hacerlo?<\/p>\n<p>Echemos un vistazo:<\/p>\n<pre><code class=\"language-php\">$products = Product::select('id', 'name')\n  -&gt;selectRaw('price - discount_price AS discount')\n  -&gt;get();<\/code><\/pre>\n<p>Aqu\u00ed tienes otro ejemplo de declaraci\u00f3n SQL <code>CASE<\/code>:<\/p>\n<pre><code class=\"language-php\">$users = DB::table('users')\n  -&gt;select('name', 'surname')\n  -&gt;selectRaw(\"(CASE WHEN (gender = 1) THEN 'M' ELSE 'F' END) as gender_text\")\n  -&gt;get();<\/code><\/pre>\n<h3>Convertir SQL Antiguo<\/h3>\n<p>Es muy com\u00fan tener una sentencia SQL que requiera ser convertida a Eloquent o Query Builder, especialmente de un antiguo proyecto en el que se haya trabajado.<\/p>\n<p>Pues bien, en realidad no necesitas hacer eso. En su lugar, puedes utilizar simplemente la sentencia <code>DB::select()<\/code> como se muestra:<\/p>\n<pre><code class=\"language-php\">$results = DB::select('select * from users where id=?', [1]);<\/code><\/pre>\n<h3>Ejecutar Consulta Sin Resultados<\/h3>\n<p><code>DB::statement<\/code> puede ejecutar una consulta SQL, sin obtener resultados como <code>INSERT<\/code> o <code>UPDATE<\/code> sin variables.<\/p>\n<p>Esto se utiliza con frecuencia en la migraci\u00f3n de bases de datos cuando cambia la estructura de una tabla y hay que cambiar los datos antiguos por los nuevos:<\/p>\n<pre><code class=\"language-php\">DB::statement('UPDATE users SET role_id = 1 WHERE role_id IS NULL AND YEAR(created_at) &gt; 2020');<\/code><\/pre>\n<p>Adem\u00e1s, <code>DB::statement()<\/code> puede ejecutar cualquier consulta SQL con un esquema que no est\u00e9 limitado a valores o columnas. Aqu\u00ed tienes un ejemplo:<\/p>\n<pre><code class=\"language-php\">DB::statement('DROP TABLE users');\nDB::statement('ALTER TABLE projects AUTO_INCREMENT=123');<\/code><\/pre>\n\n<h2>Resumen<\/h2>\n<p>A estas alturas, deber\u00edas tener un conocimiento profundo de las transacciones de base de datos en Laravel y de c\u00f3mo implementarlas. No s\u00f3lo ayudan a la integridad de los datos, sino que tambi\u00e9n ayudan a <a href=\"https:\/\/kinsta.com\/es\/blog\/rendimiento-laravel\/\" rel=\"noopener\">optimizar el rendimiento de Laravel<\/a> y facilitan tu <a href=\"https:\/\/kinsta.com\/es\/blog\/tutoriales-laravel\/\" rel=\"noopener\">proceso de desarrollo<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Los problemas de exactitud y consistencia de los datos pueden dar lugar a todo tipo de problemas, desde peque\u00f1os inconvenientes hasta grandes problemas corporativos. Es fundamental &#8230;<\/p>\n","protected":false},"author":255,"featured_media":54783,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[622,766,432,1093],"topic":[1315,1303],"class_list":["post-54782","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-laravel","tag-php","tag-php-frameworks","topic-frameworks-php","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente<\/title>\n<meta name=\"description\" content=\"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente\" \/>\n<meta property=\"og:description\" content=\"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-20T07:36:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:31:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mahitab Mostafa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mahitab Mostafa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\"},\"author\":{\"name\":\"Mahitab Mostafa\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58\"},\"headline\":\"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente\",\"datePublished\":\"2022-07-20T07:36:46+00:00\",\"dateModified\":\"2025-10-01T19:31:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\"},\"wordCount\":2497,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg\",\"keywords\":[\"database\",\"laravel\",\"php\",\"php frameworks\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\",\"name\":\"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg\",\"datePublished\":\"2022-07-20T07:36:46+00:00\",\"dateModified\":\"2025-10-01T19:31:57+00:00\",\"description\":\"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg\",\"width\":1460,\"height\":730,\"caption\":\"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58\",\"name\":\"Mahitab Mostafa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g\",\"caption\":\"Mahitab Mostafa\"},\"description\":\"Mahitab is a professional content writer, specializing in technology and cybersecurity. She has written hundreds of articles about WordPress, web hosting, and other related topics. She's a firm believer in the internet's role in the future of business.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/mahitabmostafa\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente","description":"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/","og_locale":"es_ES","og_type":"article","og_title":"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente","og_description":"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.","og_url":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-07-20T07:36:46+00:00","article_modified_time":"2025-10-01T19:31:57+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg","type":"image\/jpeg"}],"author":"Mahitab Mostafa","twitter_card":"summary_large_image","twitter_description":"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Mahitab Mostafa","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/"},"author":{"name":"Mahitab Mostafa","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58"},"headline":"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente","datePublished":"2022-07-20T07:36:46+00:00","dateModified":"2025-10-01T19:31:57+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/"},"wordCount":2497,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg","keywords":["database","laravel","php","php frameworks"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/","url":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/","name":"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg","datePublished":"2022-07-20T07:36:46+00:00","dateModified":"2025-10-01T19:31:57+00:00","description":"\u00bfQuieres aprender todo sobre las transacciones de base de datos en Laravel y c\u00f3mo utilizarlas de manera efectiva? La Base de Conocimientos de Kinsta tiene la respuesta.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/07\/laravel-database.jpg","width":1460,"height":730,"caption":"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/base-de-datos-de-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/es\/secciones\/laravel\/"},{"@type":"ListItem","position":3,"name":"Transacciones en la Base de Datos de Laravel: C\u00f3mo Implementarlas y Utilizarlas Eficazmente"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58","name":"Mahitab Mostafa","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g","caption":"Mahitab Mostafa"},"description":"Mahitab is a professional content writer, specializing in technology and cybersecurity. She has written hundreds of articles about WordPress, web hosting, and other related topics. She's a firm believer in the internet's role in the future of business.","url":"https:\/\/kinsta.com\/es\/blog\/author\/mahitabmostafa\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/54782","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/255"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=54782"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/54782\/revisions"}],"predecessor-version":[{"id":54894,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/54782\/revisions\/54894"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/translations\/de"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/translations\/it"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/translations\/jp"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/54782\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/54783"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=54782"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=54782"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=54782"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}