Cakephp 4:FIND_IN_SET 未返回结果
Cakephp 4: FIND_IN_SET not returning result
我的应用程序中有一个数组 $submenus
,我将其分解为分隔字符串:
$subs = implode(',', $submenus);
字符串看起来像这样:'ml_,nc_,msr_'
。这些值存储在我的 submenus
table 中名为 group_prefix
的字段中。每个 submenu
行都有一个唯一的 group_prefix
.
以下代码从数据库构建菜单和子菜单:
$menus = $this->Menus->find('all', [
'order' => ['Menus.display_order ASC'],
'conditions' => $conditions,
'contain' => [
'Submenus' => [
'conditions' => [
'Submenus.status' => 1,
'FIND_IN_SET("' . $subs . '", Submenus.group_prefix)'
],
]
]
]);
$this->set('menus', $menus);
它工作正常,直到我在 Submenus
上添加 FIND_IN_SET
条件。当我这样做时,我没有返回子菜单,只有主菜单。调试确认字符串的格式为 属性。没有出错,我只是没有结果集。
当我 运行 在 MySQL 中查询子菜单时,它起作用了。
set @prefixes = 'ml_,nc_,msr_';
SELECT `id`, `name` FROM `submenus` WHERE `status` = 1 AND FIND_IN_SET(`submenus`.`group_prefix`, @prefixes);
+----+---------------------------+
| id | name |
+----+---------------------------+
| 4 | Mission Lessons Module |
| 5 | MSR Module |
| 8 | Work Authorization Module |
+----+---------------------------+
我错过了什么?
答案是颠倒 FIND_IN_SET 中参数的顺序。
我的应用程序中有一个数组 $submenus
,我将其分解为分隔字符串:
$subs = implode(',', $submenus);
字符串看起来像这样:'ml_,nc_,msr_'
。这些值存储在我的 submenus
table 中名为 group_prefix
的字段中。每个 submenu
行都有一个唯一的 group_prefix
.
以下代码从数据库构建菜单和子菜单:
$menus = $this->Menus->find('all', [
'order' => ['Menus.display_order ASC'],
'conditions' => $conditions,
'contain' => [
'Submenus' => [
'conditions' => [
'Submenus.status' => 1,
'FIND_IN_SET("' . $subs . '", Submenus.group_prefix)'
],
]
]
]);
$this->set('menus', $menus);
它工作正常,直到我在 Submenus
上添加 FIND_IN_SET
条件。当我这样做时,我没有返回子菜单,只有主菜单。调试确认字符串的格式为 属性。没有出错,我只是没有结果集。
当我 运行 在 MySQL 中查询子菜单时,它起作用了。
set @prefixes = 'ml_,nc_,msr_';
SELECT `id`, `name` FROM `submenus` WHERE `status` = 1 AND FIND_IN_SET(`submenus`.`group_prefix`, @prefixes);
+----+---------------------------+
| id | name |
+----+---------------------------+
| 4 | Mission Lessons Module |
| 5 | MSR Module |
| 8 | Work Authorization Module |
+----+---------------------------+
我错过了什么?
答案是颠倒 FIND_IN_SET 中参数的顺序。