【发布时间】:2016-01-15 03:15:00
【问题描述】:
我的数据库中有一个用户列表,例如带有名字、姓氏和公司,它们都是文本字段。现在我有一个自动完成字段,可以在其中输入名字、姓氏和公司来查找具有相似姓名或公司名称的用户。我想用 RedbeanPHP 来完成这个。不幸的是,文档没有解释如何在他们的“finder”函数中实现多个条件。 “exec”函数也没有很好地解释,因为我不知道如何将表单中的值准备到手动语句中。
这是我的解决方案,它可以在输入名字或姓氏或公司时找到用户:
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 一起搜索这些多个字段(= 多个条件)。
【问题讨论】:
-
我怀疑你高估了
redbeanPHPfind函数的作用。它获取 sql 字符串并将其附加到WHERE语句之后生成的 SQL。然后它准备生成的SQL查询字符串。所以:要匹配名字和姓氏,请使用 SQL 字符串:' firstname LIKE ? and lastname LIKE ?'作为 SQL。where clause可以是一个复杂的,如你所愿。exec函数类似。 -
$userRbList = R::find( 'user', ' (firstname LIKE ?) or (lastname LIKE ?) or (company LIKE ?)', [ '%' . $_POST['autocomplete'] . '%' ] );不能像预期的那样工作 -
好的,谢谢!如果您愿意,您可以回答问题,我会给您投票并将其标记为最佳答案