laravel-4之Laravel 4 关系可以使用不同的数据库吗
在工作中,我们使用 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
}
}
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。