Una herramienta en exceso útil es la posibilidad de modificar valores de la base de datos, ya sea insertando nuevos o modificando existentes.
Para esto se utilizan los data scripts, los cuales son muy similares a los scripts que modifican la estrucutra de base de datos.
Dentro del directorio Setup de nuestro módulo vamos a crear nuestro instalador de datos. Esto lo haremos con el archivo InstallData.php.
Continuando con los ejemplos del módulo Barbanet_SampleModule, nuestro instalador contendrá:
namespace Barbanet\SampleModule\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
class InstallData implements InstallDataInterface
{
/**
* Install Data
*
* @param ModuleDataSetupInterface $setup Module Data Setup
* @param ModuleContextInterface $context Module Context
*
* @return void
*/
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$data = [
[
'Primer registro',
'Insertando desde script de instalación de datos',
date('Y-m-d H:i:s'),
'1',
'Prueba de inserción de primer registro.'
]
];
foreach ($data as $row) {
$bind = [
'title' => $row[0],
'content' => $row[1],
'creation_time' => $row[2],
'is_active' => $row[3],
'description' => $row[4]
];
$setup->getConnection()->insert(
$setup->getTable('barbanet_samplemodule'),
$bind
);
}
}
}
Simplemente estaré insertando un registro en la tabla que ya había creado. Para lograrlo, luego de definir correctamente la versión de nuestro módulo, vamos a a la consola y ejecutamos:
bin/magento setup:upgrade
En el caso de este módulo (si recién fue instalado por primera vez), se habrá ejecutado el instalador.
Si revisamos el contenido de la tabla barbanet_samplemodule, deberíamos ver:
Y si controlamos el contenido de la tabla setup_module, deberíamos ver que, en este caso, el módulo está en la versión 2.10.0 (y también la versión de los datos).
Ahora, supongamos que ya teníamos datos y necesitamos modificarlos. Para esto vamos a usar el script de actualización.
Crearemos entonces, también dentro del directorio Setup, el archivo UpgradeData.php, el cual contendrá:
namespace Barbanet\SampleModule\Setup;
use Magento\Framework\Setup\UpgradeDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
class UpgradeData implements UpgradeDataInterface
{
/**
* Upgrade Data
*
* @param ModuleDataSetupInterface $setup Module Data Setup
* @param ModuleContextInterface $context Module Context
*
* @return void
*/
public function upgrade( ModuleDataSetupInterface $setup, ModuleContextInterface $context )
{
$installer = $setup;
if (version_compare($context->getVersion(), '2.11.0')) {
if ($installer->getTableRow($installer->getTable('barbanet_samplemodule'), 'row_id', 1)) {
$installer->updateTableRow(
$installer->getTable('barbanet_samplemodule'),
'row_id',
1,
'description',
'Actualizado contenido con script'
);
}
}
}
}
Nuevamente, ajustamos la versión de nuestro módulo y volvemos a la consola.
bin/magento setup:upgrade
Al finalizar, deberíamos ver que el módulo subió de versión.
Y si revisamos el contenido de la tabla barbanet_samplemodule, el valor de la columna description habrá sido actualizado (siempre y cuando se cumplan las condiciones del script).
El código actualizado del módulo está disponible en el tag 2.11.0 en GitHub.