Laravel 4.2:将数据库记录从一个数据库复制到另一个数据库

时间:2016-05-07 00:11:21

标签: php laravel-4 eloquent

我需要在Laravel 4.2中将一个记录子集从一个数据库复制到另一个数据库

我写了一个工匠任务,加载我需要从"默认"数据库连接,现在需要将它们保存到第二个数据库连接(在config / database.php中定义)。我无法找到的方法是使用模型的save()方法保存到默认连接以外的数据库。

这可能吗?我可以推动"我保存到第二个数据库连接?或者我是否需要更改为" pull"逻辑,反转我的数据库连接定义,并加载来自" second"保存到"默认"?

之前的连接

2 个答案:

答案 0 :(得分:1)

首先,您必须在app/conifg/database.php中定义第二个连接,然后在connections中定义:

'second_db_conn' => [
        'driver'    => 'mysql',
        'host'      => $_SERVER['MYSQL_HOST'],
        'database'  => $_SERVER['MYSQL_DATABASE'],
        'username'  => $_SERVER['MYSQL_USERNAME'],
        'password'  => $_SERVER['MYSQL_PASSWORD'],
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ],

然后在yout模型上设置此连接 - 保存 - 并切换回默认值(在我的示例中为mysql):

$model->setConnection('second_db_conn')->save();
$model->setConnection('mysql');

答案 1 :(得分:1)

正如@Filip所指出的那样,在保存模型之前,必须将模型上的连接设置为第二个(目标)数据库。

但是,还需要将.resultsdiv{ display: flex; align-items: center; justify-content: center; margin-left: 10px; margin-right: 10px; } ul#results { display: none; justify-content: center; background-color: rgba(255, 255, 255, 0.09); height: 120px; margin-top: 4px; overflow:auto; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 3px; -webkit-box-shadow: rgba(0, 0, 0, 0.24) 0px 0px 43px; -moz-box-shadow: rgba(0, 0, 0, 0.24) 0px 0px 43px; box-shadow: rgba(0, 0, 0, 0.24) 0px 0px 43px; } ul#results li { width: 100px; display: flex; justify-content: center; align-items: center; margin: 10px 10px 10px 10px; padding: 8px 8px 8px 8px; cursor: pointer; border: aliceblue solid 1px; transition: background-color .3s ease-in-out; -moz-transition: background-color .3s ease-in-out; -webkit-transition: background-color .3s ease-in-out; } 设置为null(除非您确定第二个数据库中不存在具有该ID的记录,否则我无法确保将分配一个新的递增id值。

还需要在保存之前将模型的id属性设置为exists。从源数据库读取记录后,该值在模型中为false,因为记录已从那里成功读取(而不是创建为新记录)。未能重置true导致Laravel尝试执行exists,因为没有匹配的记录(具有空id)需要更新。{1}}不会向数据库写入任何内容。将UPDATE WHERE id = $model->id设置为exists可确保将保存执行为false