Laravel Eloquent:它是如何运作的?基于动态Schema MetaData-Lookup = Performance?

时间:2015-11-09 06:32:29

标签: php mysql performance laravel eloquent

整个持久层是一个相当大而复杂的laravel组件。是否有人已经深入研究过这个问题,并且可以用几句话来解释一下,最新情况下是什么?

  1. Eloquent(与其他ORM层相比)似乎不会在应用程序的某处缓存/存储列元数据?或者是吗? (在Java JPA或Doctrine中,这是通过Annotations完成的,但是laravel似乎没有这个元数据?)
  2. 这意味着它必须查询来自MySQL的INFORMATION_SCHEMA.COLUMNS的每个请求。这是否意味着,laravel将为每个简单的SQL查询提供iusse两个查询(第一个获取列/表定义?)
  3. 在新的Instance / Facade上调用hasColumn会不可避免地导致SQL查询,只是为了检索元数据/表定义?

1 个答案:

答案 0 :(得分:3)

据我所知,你是对的,Eloquent不会缓存或存储列元数据。但这并不意味着每个查询都需要一秒钟来请求信息模式。查询构建器只是假定您知道哪些列名是合法的,并创建并发送查询。这意味着,如果您选择一个未知列,您将获得异常!最后hasColumn导致SQL查询。