gpt4 book ai didi

laravel-4 - Laravel 4 关系可以使用不同的数据库吗

转载 作者:行者123 更新时间:2023-12-01 10:49:05 24 4
gpt4 key购买 nike

在工作中,我们使用 Nagios 作为我们的监控平台,并且我们有一个内部编写的配置生成器。

我计划使用 Laravel 4 重写它。我们的设置是支持多个客户端,它们都有自己的配置。出于安全原因,我们将每个客户端配置存储在单独的数据库中,并使用 Apache 配置中的环境变量将数据库凭据提供给前端(每个客户端使用不同的 TCP 端口)。

问题是对于每个客户都有每个客户共有的数据库表,即时间段、联系人等。目前,如果我们想更改一个公共(public)项目,我们必须在所有数据库上手动执行此操作(尽管我已经从 cli 编写了脚本)

我希望将公共(public)元素分离到一个数据库中,并将客户特定的项目放在他们自己的数据库中。

我知道 Laravel 能够轻松地拥有多个数据库连接,但我的问题是是否可以在两个不同数据库的表之间创建 Eloquent 关系。

一个例子是客户端数据库中的服务有一个 timeperiod_id 列,它是共享数据库中时间段表中主键的外键。

我希望能够在 Controller 中无缝地执行如下所示的操作(使用模型中的适当关系。

$services = Service::all();

并在 Blade 模板 View 中

@foreach ($services as $service)
{{ $service->name }}
{{ $service->timeperiod->name }}
@endforeach

Laravel 文档和谷歌似乎没有说明这是否可行。

非常感谢任何帮助

最佳答案

我目前正在我的一个 laravel 项目中这样做。

您可以指定要匹配的外键,如果需要,还可以指定不同的主键。

class TimePeriod extends Eloquent {

protected $connection = 'some_Db';
protected $table = 'time_period';
protected $primaryKey = 'id';//can set this to anything, will default to auto incr id(optional)

public function Services() {
return $this->hasone('Services', 'time_period_id');//specify the foreign key as second param
}

}

class Services extends Eloquent {

protected $connection = 'client';
protected $table = 'services';

public function TimePeriod() {
return $this->belongsto('TimePeriod', 'id');//specify the foreign key as second param
}

}

关于laravel-4 - Laravel 4 关系可以使用不同的数据库吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22663928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com