【发布时间】:2019-08-01 13:14:44
【问题描述】:
我想在 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();
我想知道如何做同样的事情,但使用数组。
【问题讨论】:
-
您可以根据得到的查询结果自己生成插入查询。
-
您可以将模型序列化为 JSON,将所有记录保存到 .json 文件中,然后进行解析。 laravel.com/docs/5.8/…
-
我刚刚使用 JSON 进行了尝试,但对于我需要使用的表来说,它需要的时间太长了。
-
它没有错误,易于使用和更改。 stackoverflow.com/questions/58207052/…