Laravel 5.1 — Наблюдатель моделей на относительных моделях

Предположим, у меня есть следующие связанные таблицы:

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 обновляется?

Спасибо

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();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]