假设我有以下相关表格:
pages
----------------
id
content
visitors
----------------
id
name
page_visitor
----------------
page_id
visitor_id
如您所见,我们可以有三个表格,其中pages
和visitors
具有多对多关系。
我已成功在pages
模型类上实现了一个观察者类,现在,我对页面表所做的事情会反映在其他地方。使用以下代码:
class ElasticsearchPageObserver
{
private $elasticsearch;
public function __construct(ESClient $client)
{
$this->elasticsearch = $client;
}
public function created(Page $page)
{
$params = $page->buildElasticsearchParams();
$response = $this->elasticsearch->index($params);
}
public function updated(Page $page)
{
$params = $page->buildElasticsearchParams();
$response = $this->elasticsearch->index($params);
}
}
你明白了,对吧?
事实证明,当与页表具有一对多关系的表得到更新时,上面的观察者会观察它。但不适用于多对多关系(如上所述)。
好吧,现在我该怎么办? page_visitor
更新时如何做同样的事情?
由于
答案 0 :(得分:0)
我最终创建了一个方法,而不是在每个相关的类上调用attach
。
// in page:
public function attachTo($to, $id)
{
switch($to) {
case 'App\Models\Visitor':
$this->visitors()->attach($id);
break;
case 'App\Models\Banner':
$this->banners()->attach($id);
break;
case 'App\Models\AdBlock':
$this->adblocks()->attach($id);
break;
default:
return;
}
$this->indexInElasticsearch();
}