我需要在Laravel 4.2中将一个记录子集从一个数据库复制到另一个数据库
我写了一个工匠任务,加载我需要从"默认"数据库连接,现在需要将它们保存到第二个数据库连接(在config / database.php中定义)。我无法找到的方法是使用模型的save()方法保存到默认连接以外的数据库。
这可能吗?我可以推动"我保存到第二个数据库连接?或者我是否需要更改为" pull"逻辑,反转我的数据库连接定义,并加载来自" second"保存到"默认"?
之前的连接答案 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
。