执行生成的 SQL ,在本地 Windows 10 中可以,在 Liunx 容器中,未查询到记录(与 DIRECTORY_SEPARATOR 有关)
1、执行生成的 SQL ,在本地 Windows 10 中可以,在 Liunx 容器中,未查询到记录。在 Windows 10 下打印记录。如图1
1 2 3 4 5 6 7 | $rawSchema = ThemeAssetEntity::select( 'schema' ) ->where( 'theme_id' , '=' , $this ->getThemeId()) ->where( 'category' , '=' , ThemeAssetEntity::CATEGORY_PAGE) ->where( 'asset_key' , 'regexp' , $this ->themeLayout->getTemplateExtensionsPattern( $basename )) ->first(); var_dump( $rawSchema ); exit ; |
2、在 Liunx 容器 下打印记录。其结果为 NULL。如图2
3、决定打印生成的 SQL,需要删除 ->first() 。进行一下对比。Windows 10 与 Linux 的分别如下,然后在 MySQL 中执行 Linux 下的 SQL ,查询结果为 NULL。区别在于 pages/\ 与 pages//。如图3
1 2 3 4 5 6 7 8 | $rawSchema = ThemeAssetEntity::select( 'schema' ) ->where( 'theme_id' , '=' , $this ->getThemeId()) ->where( 'category' , '=' , ThemeAssetEntity::CATEGORY_PAGE) ->where( 'asset_key' , 'regexp' , $this ->themeLayout->getTemplateExtensionsPattern( $basename )); $query = str_replace ( array ( '?' ), array ( '\'%s\'' ), $rawSchema ->toSql()); $query = vsprintf( $query , $rawSchema ->getBindings()); dump( $query ); exit ; |
1 | select ` schema ` from `theme_asset` where `theme_id` = '96b1c8b9-5b18-4760-9e26-50ab009ac011' and `category` = 'page' and `asset_key` regexp '^pages/\product_detail(\.blade\.php|\.liquid|\.json)' |
1 | select ` schema ` from `theme_asset` where `theme_id` = '96dcab33-3e1d-4279-ab96-39693f03515f' and `category` = 'page' and `asset_key` regexp '^pages//product_detail(\.blade\.php|\.liquid|\.json)' |
4、分析生成正则表达式的函数。打印 DIRECTORY_SEPARATOR,两个环境的结果是不一致的。分别为 \ 与 /
1 2 3 4 5 6 7 8 9 | public function getTemplateExtensionsPattern( $basename ) { $escapeDot = array_map ( function ( $extension ){ return str_replace ( '.' , '\\.' , $extension ); }, $this ->getTemplateExtensions()); print_r(DIRECTORY_SEPARATOR); exit ; return sprintf( '^%s%s%s%s' , $this ->getPageDir(), '/' .DIRECTORY_SEPARATOR, $basename , '(' .join( '|' , $escapeDot ) . ')' ); } |
1 | \ |
1 | / |
5、删除掉 .DIRECTORY_SEPARATOR,因为其在两个操作系统中不一致。且因为在表中仅使用 /,无需要再转义。最终生成的 SQL 在两个操作系统中一致。且能够查询到结果。如图4
1 2 3 4 5 6 7 8 | public function getTemplateExtensionsPattern( $basename ) { $escapeDot = array_map ( function ( $extension ){ return str_replace ( '.' , '\\.' , $extension ); }, $this ->getTemplateExtensions()); return sprintf( '^%s%s%s%s' , $this ->getPageDir(), '/' , $basename , '(' .join( '|' , $escapeDot ) . ')' ); } |
1 | "select `schema` from `theme_asset` where `theme_id` = '96dcab33-3e1d-4279-ab96-39693f03515f' and `category` = 'page' and `asset_key` regexp '^pages/product_detail(\.blade\.php|\.liquid|\.json)'" |
近期评论