Symfony Sonata SEO 自定义 sql 使用 LIKE 查询
Symfony Sonata SEO custom sql query with LIKE
我在 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 中的查询,它会按预期工作。
如果我通过 sonata seo 命令行实用程序 运行 像这样:
php bin/console sonata:seo:sitemap '/path/to/sitemap/folder' 'https://dev.test'
我收到这个错误:
The parameter "\') AND `path` NOT LIKE(\'bill/" must be defined.
我试图转义各种字符,例如 '
和 %
,我怀疑它们是通过前缀 \
引起问题的,但是这给了我这样的错误这个:
Found unknown escape character "\%"
如何在 yaml 中正确转义此查询,以便它 运行?
问题出在 %
,它是 yaml 中的一个特殊字符。
所以有两种方法可以让它发挥作用:
要转义它,需要在它前面加上另一个 %
所以:
AND `path` NOT LIKE('checkout/%%')
或者,您可以根据 Jared 的评论避免使用 %
,而是:
LEFT(path, 9) != 'checkout/'
我在 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 中的查询,它会按预期工作。
如果我通过 sonata seo 命令行实用程序 运行 像这样:
php bin/console sonata:seo:sitemap '/path/to/sitemap/folder' 'https://dev.test'
我收到这个错误:
The parameter "\') AND `path` NOT LIKE(\'bill/" must be defined.
我试图转义各种字符,例如 '
和 %
,我怀疑它们是通过前缀 \
引起问题的,但是这给了我这样的错误这个:
Found unknown escape character "\%"
如何在 yaml 中正确转义此查询,以便它 运行?
问题出在 %
,它是 yaml 中的一个特殊字符。
所以有两种方法可以让它发挥作用:
要转义它,需要在它前面加上另一个 %
所以:
AND `path` NOT LIKE('checkout/%%')
或者,您可以根据 Jared 的评论避免使用 %
,而是:
LEFT(path, 9) != 'checkout/'