简短回答:不,也没有理由(如果我在第二个计数上错了,您帖子中的更多细节可能会帮助其他人解决您的问题)
我认为翻译中可能会遗漏一些东西,所以如果有误,请提前道歉。
您不能从查询中删除这些引号,因为 MySQL(或您使用的任何数据库引擎)需要这些引号。
如果您将整数传递给过滤函数,Magento 将按照您的意愿行事。以下
$c = Mage::getModel('cms/page')->getCollection()
->addFieldToFilter('page_id', array('in'=>array(1,2,3)));
echo $c->getSelect();
会给你一个看起来像这样的 SQL 查询
SELECT `main_table`.* FROM `cms_page` AS `main_table` WHERE (entity_id IN(1, 2, 3))
但是,一旦使用字符串,数据库生成代码就需要将这些参数括在引号中。考虑以下
这会生成如下所示的 SQL。
SELECT `main_table`.* FROM `cms_page` AS `main_table` WHERE (page_id IN('one', 'two', 'three'))
如果没有引用行为,将生成如下 SQL,
WHERE (page_id IN(one, two, three))
这是无效的 SQL。
关键是数据库生成代码没有有效或安全的方法来判断字符串是像 的数字字符串1
还是像 的单词one
。 所以它引用所有字符串。
这也不重要,因为 MySQL 具有魔力,因此以下查询的行为相同(如果您使用的是 EE 和其他一些数据库驱动程序,这可能不是真的)
SELECT `main_table`.* FROM `cms_page` AS `main_table` WHERE (page_id IN(1, 2, 3))
SELECT `main_table`.* FROM `cms_page` AS `main_table` WHERE (page_id IN('1', '2', '3'))
如果您一心想要删除这些引号,则需要将任何变量转换为 int 或自己浮动。