2015-11-09 20 views
3

整個持久層是一個相當大且複雜的laravel組件。是否有人已經深入研究過它,並且能夠用幾句話來解釋它,這是什麼在示意圖下展開的?Laravel雄辯:它是如何工作的?基於動態模式MetaData-Lookup =性能?

  1. 雄辯(與其他ORM層形成對比)似乎不在應用程序某處緩存/存儲列元數據?還是呢? (在Java JPA或Doctrine中,這是通過Annotations完成的,但laravel似乎沒有這個元數據?)
  2. 這意味着它必須從MySQL的每個請求中查詢INFORMATION_SCHEMA.COLUMNS。這是否意味着,laravel將爲每個簡單的SQL查詢添加兩個查詢(第一個獲取列/表定義?)
  3. 在新的Instance/Facade上調用hasColumn不可避免地會導致SQL Query檢索元數據/表定義?

回答

3

據我所知,你是對的,Eloquent不會緩存或存儲列元數據。但這並不意味着每個查詢都需要第二個請求信息模式的請求。查詢生成器假定您知道哪些列名是合法的,並創建併發送查詢。這意味着,如果你選擇了一個未知的列,你會得到一個異常!最後hasColumn導致一個SQL查詢。