【发布时间】:2014-05-09 08:11:03
【问题描述】:
我们已经为在 drupal 中注册制作了一个自定义表单。 我们在其中添加了名字、姓氏、城市、技能。 现在我们要根据以下条件搜索用户。 但是,如果当 drupal 创建一个新字段时,它会在后端创建一个带有字段名称的表。 例如:field_data_field_account_type
like we have writtern code for search on te basis of account type
function getUsersList($type=null){
$query = db_select('users', 'u');
$query->join('field_data_field_account_type', 'at', 'u.uid = at.entity_id');
$query->fields('at')
->fields('u')
->condition('at.field_account_type_value',$type,'=')
->orderBy('created', 'DESC');
$result = $query->execute();
$users = array();
while($record = $result->fetchAssoc())
{
$user_fields = user_load($record['uid']);
$users[] = $user_fields;
}
return $users;
}
but if we will search on multiple tables using joins search will become slow.
那么,我们应该遵循什么方法来通过名字、城市、技能、 不使用连接。
drupal中有没有表单域api函数可以解决。
我找到了一种解决方案,但我面临一个问题。这是我的代码
i found some solution for my problem but i am facing one problem
$query = new EntityFieldQuery();
$results=$query->entityCondition('entity_type', 'user');
if($type!=null)
{
$query->fieldCondition('field_account_type', 'value',$type, '=');
}
if($name!=null)
{
$query->fieldCondition('field_first_name', 'value',"%$name%", 'like');
//$query->fieldCondition('field_last_name', 'value',"%$name%", 'like');
}
/*if($city!=null&&isset($city))
{
$query->fieldCondition('field_city', 'value',"%$city%", 'like');
}
if($skill!=null&&isset($skill))
{
$query->fieldCondition('field_skills', 'value',"%$skill%", 'like');
}*/
$results->execute();
This code only work on first name , bu not for last name.lIKE here and condition is working for last name
所以我可以设计这样的查询,使用或其中只有一个文本框.seach user by firstname,lastname,city,skill etc.
【问题讨论】: