我的数据库中有一个用户列表,例如使用firstname,lastname和company,这些都是textfields。现在我有一个自动填充字段,可以输入firstname,lastname和company来查找具有相似名称或公司名称的用户。我想用RedbeanPHP完成这个。不幸的是,文档没有解释如何在他们的" finder" -functions中实现多个条件。此外," exec" -function也没有得到很好的解释,因为我不知道如何将表格中的值准备到手册中。
这是我的解决方案,在输入名字或姓氏或公司时找到用户:
if (!empty($_POST['autocomplete'])) {
$userListbyFirstname = R::find( 'user', ' firstname LIKE ?', [ '%' . $_POST['autocomplete'] . '%' ] );
$userListbyLastname = R::find( 'user', ' lastname LIKE ?', [ '%' . $_POST['autocomplete'] . '%' ] );
$userListbyCompany = R::find( 'user', ' company LIKE ?', [ '%' . $_POST['autocomplete'] . '%' ] );
$userRbList = array_merge($userListbyFirstname, $userListbyLastname, $userListbyCompany);
$userList = array();
foreach ($userRbList as $userRb) {
$userList[] = $userRb['firstname'] . ' ' . $userRb['lastname'] . ' ' . (!empty($userRb['company']) ? $userRb['company'] : '');
}
return json_encode($userList);
}
else
{
return json_encode(array());
}
当有人进入" John Williams"它返回一个空数组,即使有一个数据库条目。我会知道如何使用普通的php,但不知道如何完成,可以使用RedBeanPHP一起搜索那些多个字段(=多个条件)。
答案 0 :(得分:1)
要求:使用WHERE
redbeanPHP
时,为find function
子句添加多个条件。
find
函数需要有效的SQL
WHERE
子句。它可以是任何有效的SQL。通常,需要一些多列过滤器。
示例:要匹配firstname
或lastname
或company
。
SQL Query字符串将类似于:
' (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?)'
现在,有三个placeholders
所以当执行查询时,它需要parameters
数组中的三个运行时值。
示例:
array( '%'. $_POST['firstname'] .'%',
'%'. $_POST['lastname'] .'%',
'%'. $_POST['company'] .'%'
)
现在,redbeanPHP
获取您提供的SQL where
子句,并将其附加到生成的查询中。然后prepares
生成的SQL看起来像:
SELECT *
FROM user
WHERE (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?);
然后使用您提供的运行时参数数组执行查询。
这就是:
R::find('user',
' (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?)',
array( '%'. $_POST['firstname'] .'%',
'%'. $_POST['lastname'] .'%',
'%'. $_POST['company'] .'%')
);
实际上确实如此。