我正在学习Laravel并且知道如何从数据库中读取数据并将其自动写入第二个数据库。
首先我从db1读取它的工作原理:
$paciente_q = Pacientes::on('db1')->find($id);
然后我希望将数据移动到db2上的相同表(在配置中分配)
Pacientes::create($paciente_q);
错误是我传递了一个对象" :: create"想要一个数组。我将它转换为数组,但没有工作。我能找到的唯一选择是创建一个包含数据的数组,然后创建:: create。但我认为应该有一个更简单的方法。我正在谈论10个专栏。
如果我们谈论数百列,我该怎么办?
答案 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é!