gpt4 book ai didi

php - Laravel 5.1 - 相关模型上的模型观察者

转载 作者:行者123 更新时间:2023-11-30 22:36:02 25 4
gpt4 key购买 nike

假设我有以下相关表:

pages
----------------
id
content

visitors
----------------
id
name

page_visitor
----------------
page_id
visitor_id

如您所见,我们可以有三个表,其中pagesvisitors 是多对多的关系。

我已经成功地在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com