php - Laravel 关系数据库连接

标签 php mysql database laravel eloquent

我正在尝试通过不同的连接获取模型关系,基本上我的连接是动态的。

$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/

相关文章:

php - 将 MySQL 登录脚本转换为 PDO

javascript - 使用验证插件 jquery 验证输入数组 - 显示每个输入的错误

javascript - 防止或编码“到”

mysql - 如何统计重复数据的数量?

mysql - 使用 select 语句更新动态列值

javascript - 如果当前页面需要 x 秒加载,重定向到另一个页面?

php - 在mysql中将camelcase表和列名转换为snake case

mysql - SQL的1=1子句的解释

sql-server - SQL Server数据工具中无法将维表作为嵌套表使用

mysql - yii2中删除相关记录——最佳实践