从一个数据库读取并写入另一个php / laravel

时间:2014-11-17 11:46:02

标签: php laravel laravel-4

我正在学习Laravel并且知道如何从数据库中读取数据并将其自动写入第二个数据库。

首先我从db1读取它的工作原理:

$paciente_q = Pacientes::on('db1')->find($id);

然后我希望将数据移动到db2上的相同表(在配置中分配)

Pacientes::create($paciente_q);

错误是我传递了一个对象" :: create"想要一个数组。我将它转换为数组,但没有工作。我能找到的唯一选择是创建一个包含数据的数组,然后创建:: create。但我认为应该有一个更简单的方法。我正在谈论10个专栏。

如果我们谈论数百列,我该怎么办?

2 个答案:

答案 0 :(得分:2)

您的方法可能无法正常工作,因为出于安全原因,默认情况下会阻止mass assignment;你需要手动设置模型的fillable属性中可以分配的模型字段(应该是一个数组) - 如果你不关心那个安全性,或者确定你永远不会直接批量通过将模型的guarded属性设置为空数组,可以为模型分配用户输入,使所有字段可以分配。

一旦完成,您的代码大多是正确的,只需将模型转换为数组,并且在创建模型时不要忘记选择第二个数据库,如下所示:

// the model to insert, converted to an array - get() would also work but first() ensures we get only one record even if the primary key is messed up and there are multiple values with the same ID
$paciente_q = Pacientes::on("db1")->find($id)->first()->toArray();

// create the same model on the second database
Pacientes::on("db2")->create($paciente_q);

现在,如果你想偶尔做几行,那么上面的方法是合适的,否则你可以查看bulk insertion,这是一个将整个表从第一个数据库复制到第二个数据库的例子:

// an array with all the rows
$patients = Pacientes::on("db1")->all()->toArray();

// get the model's table name
$table = with(new Pacientes)->getTable(); 

// bulk insert all these rows into the second database
DB::connection("db2")->table($table)->insert($patients);

请注意,这里我们没有使用Eloquent来插入它们,所以我们必须首先从模型的实例中获取表的名称;如果第二个数据库中的表名与第一个数据库的名称不同,则相应地调整$table变量。

答案 1 :(得分:1)

解决方案是将get()更改为first(),因为我们正在搜索一个项目。我读错了@André的第一个解决方案......对不起!应该学习阅读而不是Laravel!

$paciente_q = Pacientes::on('db1')->where('numerohistoria',$numerohistoria)->first()->toArray();

    Pacientes::create($paciente_q);

现在它有效!!非常感谢@André!