我在应用程序中有一个数组$submenus
,我将它内爆为一个分隔字符串:
$subs = implode(',', $submenus);
字符串看起来如下所示:'ml_,nc_,msr_'
。这些值存储在我的submenus
表中名为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
条件之前,它一直工作得很好。当我添加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 |
+----+---------------------------+
我错过了什么?
1条答案
按热度按时间l2osamch1#
答案是颠倒FIND_IN_SET中参数的顺序。