【发布时间】:2016-02-22 03:42:39
【问题描述】:
我正在尝试通过不同的连接获得模型关系,基本上我的连接是动态的。
$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模型中的belongsTo关系,它会抛出错误,因为它切换回默认数据库连接而不使用con1
It is possible to setConnection() and keep for hasMany relationship and also for belongsTo relationship?
我不能在模型中设置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 的所有模型的连接,但仍然没有运气。
【问题讨论】:
-
无法完成,因为它正在尝试加入这些表。无法在不同的连接上连接表。
-
@user3158900 Laravel 关系不使用连接。理论上这是可能的,但代码是否允许还需要研究。
标签: php mysql database laravel eloquent