我有一个用户表,一个role_members表和一个角色表。如何根据深层模型关联对CakePHP进行排序或查找?
role_members表具有user_id和role_id,因为用户可以有多个角色。
我有一个DataTable,其中包含用户ID,电子邮件,名称和角色。我可以根据用户表中的字段轻松排序和过滤。 DataTable的工作方式是有一个搜索框搜索所有字段。所以,我的搜索查询需要是一个'OR',其中用户名像search_term或电子邮件像search_term或角色名称like search_term
当我尝试根据角色名称进行排序或过滤时,出现问题。 如果我想按RoleMember.Role.name排序或按RoleMember.Role.name搜索,我该怎么做?
我的查找选项如下:
$sOrder = array('User.full_name' => 'asc');
if (isset($params['iSortCol_0'])) {
$sOrder = array();
for ($i=0 ; $i<intval($params['iSortingCols']) ; $i++)
{
if ($params[ 'bSortable_'.intval($params['iSortCol_'.$i]) ] == "true")
{
$sOrder[$columns[ intval($params['iSortCol_'.$i]) ]] = $params['sSortDir_'.$i] ;
}
}
}
$find_options = array(
'order' => $sOrder,
'contain' => array(
'RoleMember' => array('Role', 'Instance'),
'AllowedLocation'
),
'limit' => $limit,
'offset' => $offset
);
if(isset($params['sSearch'])){
$search_term = '%'. $params['sSearch'] .'%';
$find_options['conditions'] = array(
'Or' => array(
'User.full_name LIKE ' => $search_term,
'User.email LIKE ' => $search_term,
'User.username LIKE ' => $search_term
//'RoleMember.Role.name LIKE ' => $search_term,
)
);
}
那么使用'joins'怎么样? –
试过了。出于某种原因,它们似乎不适用。起初我以为是因为我在使用可容忍的,但我不确定。我想我应该打破调试器,看看我能否弄清楚发生了什么。 –