Here comes the tricky part. How do we synchronize the Read Model with the Write Model? We already said we would do it by using Domain Events captured in a Write Model transaction. For each type of Domain Event captured, a specific projection will be executed. So a one-to-one relationship between Domain Events and projections will be set.
Let's have a look at an example of configuring projections so that we can get a better idea. First of all, we need to define a skeleton for the projections:
interface Projection { public function listensTo(); public function project($event); }
So defining an Elasticsearch projection for a PostWasCreated event would be as simple as this:
namespace Infrastructure\Projection\Elasticsearch; ...