我正在尝试在不同的连接中建立模型关系,基本上我的连接是动态的。
$con = 'con1'
$persons = new \App\Models\Person;
$persons->setConnection($con);
$persons = $persons->where('somevalue', 1)->get()
所以在这里,我从config/database.php中获取了Person的con1(可以是con2、con3、con4等)。
然而,当我尝试循环遍历此数据并获取关系时,它会切换到默认的数据库连接。
@foreach($persons as $person)
{{$person->data->name}}
@endforeach
在上面的循环中,data
是Person Model中的belongsTo关系。由于它切换回默认数据库连接而不使用con1,因此会出现错误。
是否可以为hasMany和belongsTo关系都设置setConnection()呢?
我不能在Model中设置protected $connection;
,因为连接是可变的
到目前为止,我尝试创建了一个继承eloquent的抽象类,并使我的模型扩展了这个抽象类。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;
abstract class Database extends Eloquent {
protected $connection;
}
<?php
namespace App\Models;
use App\Models\Database as Database;
class Person extends Database{
protected $table = 'persons';
}
理论上,当我使用 setConnection
方法时,我会将连接设置到所有继承了这个 class
的模型中,但是还没有成功。