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

时间:2014-03-26 14:22:59

标签: laravel-4 eloquent

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

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

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

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

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

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

我希望能够在控制器中无缝地执行类似下面的操作(与模型中的适当关系。

$services = Service::all();

并在刀片模板视图中

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

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

任何帮助非常感谢

1 个答案:

答案 0 :(得分:6)

我目前正在我的一个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
  }

}