Magento新手求助:获取指定代码生成的SQL查询语句
分析你的Magento代码生成的SQL查询
嘿,作为Magento新手,能理解你想搞懂ORM背后实际跑的SQL的心情——这不管是调试问题还是优化性能都特别实用!
先给你一个新手必备的小技巧:如果想直接看Magento集合对应的SQL语句,只要在你的代码里加一行:
echo $collection->getSelect(); die;
运行后就能直接看到实际执行的原生SQL了,比猜靠谱多了!
接下来拆解你这段代码对应的SQL逻辑:
你的代码是从manager/campus模型的数据集(Collection)里筛选符合条件的记录,两个过滤规则:
- 检查
regionalmanager字段的逗号分隔值列表里,是否包含传入的$cust_id(代码里用了finset规则,对应MySQL的FIND_IN_SET函数) - 要求
status字段的值必须是1
假设你的manager/campus模型对应的数据库表是manager_campus(Magento默认会把模型名转换成下划线分隔的表名,比如manager/campus对应manager_campus,如果你的模块配置没自定义表名的话),那么生成的SQL大概是这样:
SELECT `main_table`.* FROM `manager_campus` AS `main_table` WHERE (FIND_IN_SET('替换成你的cust_id值', `main_table`.`regionalmanager`)) AND (`main_table`.`status` = 1)
几个细节说明:
main_table是Magento给主表自动起的别名,你要是好奇其他关联表的别名,可以用$collection->getSelect()->getPart('from')查看完整的表映射关系FIND_IN_SET函数的作用就是检查第一个参数的值是否存在于第二个参数的逗号分隔字符串里,完美对应你代码里的finset过滤规则- 第二个条件
status = 1就是直白的等值匹配,对应代码里的eq规则
如果你的表名不是manager_campus,可以去模块的config.xml里找<entities>节点下的配置,就能看到实际绑定的表名啦。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

