2015-05-27 10 views
8

La seminatrice di Laravel esegue una serie di eventi modello sui miei modelli che attivano, tra le altre cose, le e-mail di notifica di Nuovo ordine dall'evento modello Product::saved().È possibile impedire a Laravel di eseguire gli eventi del modello quando il database viene sottoposto a seeding?

Questo rallenta notevolmente il seeding del database. È possibile rilevare se viene eseguito un seme e, in caso affermativo, comunicare a Laravel di non eseguire gli eventi modello?

risposta

13

Ci sono funzioni nella classe Model che consentono di ignorare gli eventi.

Prima di usare un modello a seme, è necessario fare qualcosa di simile ...

YourModel::flushEventListeners(); 
+0

Questo ha funzionato alla grande per me. – tptcat

+0

Sembra non funzionare con eventi personalizzati. L'altra soluzione: '' ' // Rimuovere Dispatcher Modello :: unsetEventDispatcher() ' '' sembra funzionare in questo caso. –

10

vi consiglio di rimuovere il Dispatcher in questo caso dal modello Eloquente.

Ad esempio.

// Check Dispatcher 
Model::getEventDispatcher() 

// Remove Dispatcher 
Model::unsetEventDispatcher() 

// Add Dispatcher 
Model::setEventDispatcher(new \Illuminate\Events\Dispatcher); 
Problemi correlati