strapi的populate应用

populate主要应用于数据库检索时跨collection的检索信息。但是在实际工程应用中,为了提升性能,我们不需要跨collection收集信息。在strapi应用中可以采用这样的方法做到。

第一,在相关模型的setting里面的相关relation里配置autoPopulation为false。例如:

in file: /api/category/models/category.settings.json

{                                                                                                                                                              
  "connection": "default",                                                                                                                                     
  "collectionName": "categories",                                                                                                                              
  "info": {                                                                                                                                                      
    "name": "category"                                                                                                                                         
  },   
...                                                                                                                                                                                                                                                                                                     
  "attributes": {                                                                                                                                                
    "name": {                                                                                                                                                      
      "type": "string",                                                                                                                                            
      "default": "unnamed",                                                                                                                                        
      "unique": true,                                                                                                                                              
      "required": true,                                                                                                                                            
      "minLength": 1,                                                                                                                                              
      "maxLength": 128                                                                                                                                           
    }, 
...                                                                                                                                                          
    "models": {                                                                                                                                                    
      "via": "categories",                                                                                                                                         
      "collection": "model",                                                                                                                                       
      "autoPopulate": false                                                                                                                                      
    }                                                                                                                                                          
  }                                                                                                                                                          }    

在此示例中,即关闭了检索category时对models的自动populate操作,除非显示的给query函数指定populate = ['models']

第二,如果在配置了autoPopulate为false之后,你需要对该relation做populate操作,那么比较好的实践方法是重写该模型的controller,然后在controller中对service调用的时候,把populate作为参数传递给query函数。例如:

await strapi.services.category.find(parm, ['models'])

以上代码则显式的把['models']参数作为populate参数传递给了service里面的query函数