我在mysql中有两个表
用户: -ID -名称 -电子邮件 -role
位置 -ID - 位
我需要在Codeigniter中使用PHPActiveRecord构建搜索词。 用户键入一个名为'John'或'Designer'的术语,我需要在用户和postions表中搜索它。 我可以使用like运算符在Users表中搜索该术语,但无法弄清楚如何在Positions表中搜索位置字段。
我用于在单个表中搜索的代码如下:
/**
*
* Search users based on parameters
* @param integer $limit
* @param integer $start
* @param string $term
*/
public function search_candidates($limit, $start, $term, $role)
{
$candidates = User::all(array(
'conditions' => "('role' => $role)
AND ((name like '%".$term."%')
OR (email like '%".$term."%'))",
'limit' => $limit,
'offset' => $start,
'order' => "name"
));
return $candidates;
}
答案 0 :(得分:1)
有多种方法可以执行此搜索 http://www.phpactiverecord.org/projects/main/wiki/Finders#joins,它解释了您可以为查询添加联接
$candidates = User::all(array(
'joins'=>'LEFT JOIN position on (normal left join stuff)
'conditions' => "('role' => $role)
AND ((name like '%".$term."%')
OR (email like '%".$term."%'))",
//(Your extra where conditions for the position)
'limit' => $limit,
'offset' => $start,
'order' => "name"
));
我认为至少应该让你走上正轨。
此外,当您以这种方式使用自定义条件时,您将使查询保持打开状态。 您必须使用查询占位符,否则您只是将原始输入放入查询中。
User::find($id)
会自动转义。
User::all(array('conditions'=>'id'=>1))
会自动转义
User::all(array('conditions'=>"id = $id"))
未被转义。
你必须User::find(array('conditions'=>'id = ?', array($id)));
您的查询将转换为类似的内容。
$candidates = User::all(array(
'conditions' => "('role' = ?)
AND ((name like ?)
OR (email like ?))",
'limit' => $limit,
'offset' => $start,
'order' => "name"
),array($role,"%$term%","%$term%");