laravel - 如何使用 Laravel 以编程方式生成表备份?
问题描述
我想在 Laravel 做一份工作,它将截断数据库并重新填充它。但是,我想确保我首先备份了表,但我不确定如何从同一个作业中创建一个包含该表中所有行的文件。我尝试使用 csv 文件(使用 LaraCSV)
public function respaldaDevices() {
$model = Device::get();
$csvExport = new \Laracsv\Export();
$campos = ['serial', 'code', 'rotulo', 'model_id',
'location_id', 'fecha_recepcion', 'guia_recepcion', 'fecha_instalacion',
'fecha_reversa', 'guia_reversa', 'pep', 'status_id', 'serial_prev',
'reversa_prev', 'str_id', 'customer_id', 'technician_id', 'provider_id', 'obs'];
$content = $csvExport->build($model,$campos)->getWriter()->getContent();
$date = date('d-m-Y H-i-s');
Storage::disk('public')->put('respaldo-devices-' . $date . '.csv', $content);
}
但我宁愿有插入语句。
编辑:到目前为止我已经尝试过:
安装 Symfony 进程和
use Symfony\Component\Process\Process;
$process = new Process(array('mysqldump', sprintf('-u%s', getenv('DB_USERNAME')),'reportes','devices > devices-'.time().'.sql'));
mysqldump 返回错误 6。
编辑2:
使其与不推荐使用的选项一起使用:
$process = new Process(
"mysqldump " . sprintf('-u%s', getenv('DB_USERNAME')) . " ". " " . "reportes " . "devices > storage\app\devices-".time().".sql --no-create-info"
);
$process->run();
我想知道如何做同样的事情,但使用数组。
解决方案
您可以改用mysqldump等特定于操作系统的工具。您可以使用process来调用它。
流程的示例用法:
$process = new Process([
'mysqldump',
sprintf('-u%s', 'my-username'),
sprintf('-p%s', 'my-password'),
'my-database my-table', // 'my-table' can be left out for a backup of the entire database
'--add-drop-database', // optional
]);
$process->run();
if (!$process->isSuccessful()) {
throw new \Exception('Failed to create backup');
}
$date = date('d-m-Y H-i-s');
Storage::disk('public')->put('respaldo-devices-' . $date . '.csv', $process->getOutput());
推荐阅读
- google-apps-script - 如何使用 Google Apps 脚本同时刷新和添加 Google 表格中的单元格
- php - 填充嵌套数组 Laravel
- python - 由于缺少 TLS CA 证书,PyInstaller 包执行失败
- discord.js - 如何从 Discord.js 中的消息中删除文件?
- python - 在 tensorflow.python.data.ops.dataset_ops.BatchDataset 中找到最大值
- java - Microsoft Graph 和 Java - 针对授权代码流的多次调用
- python - 将实例传递给对象与稍后将实例作为属性添加
- c# - 是否可以遍历 word 文档并获取所有日期?
- python - Python pandas 使用 3 列分组
- python - 熊猫数据框与列 dayofweek 和 time 作为键合并