【问题标题】:Laravel 5.1 - Model observer on relative modelsLaravel 5.1 - 相关模型上的模型观察者
【发布时间】:2015-09-11 23:26:28
【问题描述】:

假设我有以下相关表格:

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

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

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

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

我已经成功地在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 更新后如何做同样的事情?

谢谢

【问题讨论】:

  • 显然没有办法。我必须在 page 中创建一个方法,并在我想附加到任何其他模型时调用它。

标签: php mysql eloquent laravel-5.1 observers


【解决方案1】:

我最终创建了一个方法来使用,而不是在每个相关类上调用 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();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 2021-02-13
    相关资源
    最近更新 更多