我在两个不同的数据库中有两个表。这两个数据库托管在同一AWS RDS服务器上。我有一个用户帐户,可以访问这两个数据库。我在config\database.php中定义了两个不同的连接:
return array(
'default' => 'mysql',
'connections' => array(
# Our primary database connection
'mysql' => array(
'driver' => 'mysql',
'host' => 'samehost',
'database' => 'database1',
'username' => 'user1',
'password' => 'pass1'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Our secondary database connection
'mysql2' => array(
'driver' => 'mysql',
'host' => 'samehost',
'database' => 'database2',
'username' => 'user2',
'password' => 'pass2'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
我有两个连接到database1
的table1
模型和一个连接到database2
的table2
模型。这两个表都有一个列id
。如何使用雄辩的模型连接具有相同id
的行的查询
发布于 2017-01-04 15:44:41
这个解决方案对我很有效:
Model1::where('postID',$postID)
->join('database2.table2 as db2','Model1.id','=','db2.id')
->select(['Model1.*','db2.firstName','db2.lastName'])
->orderBy('score','desc')
->get();
发布于 2017-01-02 17:27:52
如果两个数据库都在同一个连接上,并且设置为默认值,则可以使用这种方法进行尝试。
$query = DB::table('database1.table1 as dt1')->leftjoin('database2.table2 as dt2', 'dt2.ID', '=', 'dt1.ID');
$output = $query->select(['dt1.*','dt2.*'])->get();
我已经在我的本地主机上试过了,它工作正常。
发布于 2017-01-02 18:07:24
这很棘手,但是可以实现的。然而,有一些限制,这可能导致原始的解决方案。
下面是你需要的,假设db1是默认的:
// class ModelOne
public function modelTwo()
{
return $this->hasOne('ModelTwo', 'id');
}
//class ModelTwo
protected $table = 'db2.model_two_table';
public function modelOne()
{
return $this->belongsTo('ModelOne', 'id');
}
// then
$model1 = ModelOne::with('modelTwo')->get();
$model1 = ModelOne::has('modelTwo')->first();
// and so on
请注意,在db配置中不能对表使用前缀。此外,如果您在其中一个模型上定义了非默认连接,则需要为这两个模型调整$table。
您还可以为每个模型使用不同的连接,许多功能都会像这样工作,但是您不能依赖于Eloquent构建的连接:
ModelOne::with('modelTwo')->get(); // works as expected - this is what you asked for
ModelOne::has('modelTwo')->get(); // error, no table found
当然,除非您有相同的模式,但无论如何这都不是您想要的。
https://stackoverflow.com/questions/41423603
复制相似问题