【发布时间】:2020-02-06 22:20:34
【问题描述】:
我在 Symfony 4 项目中使用 Sonata SEO。
sonata-project/seo-bundle: ^2.7
在我的config/packages/sonata_seo.yaml 文件中,我定义了一个自定义 SQL 查询来生成站点地图,如下所示:
sitemap:
doctrine_orm:
- { connection: doctrine.dbal.default_connection, route: catch_all, parameters: {path: null}, query: "SELECT `path`, `updated_at` AS `lastmod`, 'weekly' AS `changefreq`, '0.5' AS `priority` FROM `pages` WHERE `published` = 1 AND `path` NOT LIKE('checkout/%') AND `path` NOT LIKE('bills/%%')" }
为了便于阅读(yaml 强制我将其放在一行中),这里是查询:
SELECT `path`, `updated_at` AS `lastmod`, 'weekly' AS `changefreq`, '0.5' AS `priority`
FROM `pages`
WHERE `published` = 1 AND `path` NOT LIKE('checkout/%') AND `path` NOT LIKE('bills/%')
基本上,我使用WHERE NOT LIKE 从正在生成的站点地图中排除某些页面。
如果我直接在 mysql 中运行查询,它会按预期工作。
如果我像这样通过奏鸣曲 seo 命令行实用程序运行它:
php bin/console sonata:seo:sitemap '/path/to/sitemap/folder' 'https://dev.test'
我收到此错误:
必须定义参数 "\') AND `path` NOT LIKE(\'bill/"。
我试图通过前缀\ 来转义各种字符,例如' 和%,我怀疑它们会导致问题,但这给了我这样的错误:
发现未知转义字符“\%”
如何在 yaml 中正确转义此查询以使其运行?
【问题讨论】:
-
你可以说
LEFT(path, 9) != 'checkout/'。
标签: php mysql symfony yaml sonata