假设我有以下相关表:
pages
----------------
id
content
visitors
----------------
id
name
page_visitor
----------------
page_id
visitor_id
如您所见,我们可以有三个表,其中pages
和visitors
是多对多的关系。
我已经成功地在 pages
模型类上实现了一个观察者类,现在,我对 pages 表所做的一切都会在其他地方得到反射(reflect)。使用以下代码:
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
更新时做同样的事情?
谢谢
最佳答案
我最终创建了一个方法来使用,而不是在每个相关类上调用 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();
}
关于php - Laravel 5.1 - 相关模型上的模型观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32524598/