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

标签 php mysql eloquent laravel-5.1 observers

假设我有以下相关表:

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/

相关文章:

laravel - undefined variable : files (View:\resources\views\home.blade.php)

laravel - laravel中删除行时如何更新字段

php - 更新 Solr 配置以搜索所有字段

php - 无法运行 Lumen Laravel

MySQL 探查器将查询减少超过 300 个字符的长度

mysql - 不允许主机 'localhost' 连接到此 MySQL 服务器 (#1130)

php - 如果定向到页面,则运行查询

php - Laravel:有没有办法删除数据库查询子句?

PHP开始时间和结束时间问题

php - 我如何使用全文,例如 Like