我正在尝试通过不同的连接获取模型关系,基本上我的连接是动态的。
$con = 'con1'
$persons = new \App\Models\Person;
$persons->setConnection($con);
$persons = $persons->where('somevalue', 1)->get()
所以在这里我从 con1 获取 Person(其中 con1 存储在 config/databse.php 中 它可以是 con2、con3、con4 等。
但是这可行,但是当我尝试遍历此数据并获取关系时,它会切换到默认数据库连接。
@foreach($persons as $person)
{{$person->data->name}}
@endforeach
在上面的循环中,data
是 Person Model 中的 belongsTo 关系,它会抛出错误,因为它切换回默认的数据库连接并且没有使用 con1
是否可以为 hasMany 关系和 belongsTo 关系设置连接()并保持?
我无法在模型中设置 protected $connection;
因为连接是可变的
到目前为止我尝试的是我创建了一个扩展的抽象类,我的模型扩展了这个抽象类
<?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
的模型,但仍然没有成功。
最佳答案
您可以尝试 eager loading
关系:
$persons = $persons->with('data')->where('somevalue', 1)->get();
关于php - Laravel 关系数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813363/