php - wherepivot - Establezca los modelos de Laravel Eloquent en carga ansiosa por defecto
wherepivot laravel (2)
Los modelos elocuentes de Laravel están configurados para carga diferida de forma predeterminada. El problema es que hace una gran cantidad de consultas a la base de datos y, especialmente durante el alto tráfico, la aplicación laravel se bloquea, mientras que una aplicación similar construida en Yii 1 no tiene problemas.
Después de instalar la barra de depuración de Laravel, el problema es que se realizan demasiadas consultas en cada carga de página. El siguiente paso es consultar la optimización. He estado usando la carga impaciente como se indica en la documentación de Laravel, pero aún tengo demasiadas consultas.
Me preguntaba si hay una manera de establecer Eloquent solo en "Eager Load" en el entorno dev. De esa manera, cuando la página no se carga, identificar el problema sería más fácil.
La solución para alta carga de base de datos es Cache .
El almacenamiento en caché de forma adecuada podría ofrecerle un rendimiento increíble durante el alto tráfico, ya que reduce a cero las consultas comunes de la base de datos y las redirige a las RAM, que son más rápidas.
Habilitar el caché de ruta también aumentará el rendimiento:
php artisan route:cache
EDITAR:
Como puntos Fx32 , debe asegurarse de que necesita Eloquent y no sería mejor hacer la misma consulta directamente a la base de datos, unir las tablas que necesita y hacer una sola consulta en lugar de hacer muchas:
El caché no es una buena solución como solución para las consultas de bases de datos incorrectas. Elocuente es genial, pero a menudo es mejor escribir consultas adecuadas con algunas combinaciones. No solo destruya su base de datos y luego arroje todos los resultados en una memoria caché, ya que introducirá nuevos problemas. Si su caso de uso no es una API de CRUD plana, los patrones de ActiveRecord podrían no ser la mejor solución de todos modos. Si selecciona cuidadosamente y se une a los resultados de la base de datos, y desea acelerar la recuperación de dichos elementos, el almacenamiento en caché puede ayudar.
Puede configurar las relaciones predeterminadas para "carga impaciente" directamente en los modelos:
Class MyModel extends Model {
protected $with = [''relation''];
}