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

lyhabc 阅读:26 2024-09-07 23:24:14 评论:0

在工作中,我们使用 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.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号