php - 表单可以返回不同数量的值,尝试在学说查询中使用返回的值
问题描述
我在数据库中保存了一堆解析的消息,我希望能够根据用户输入提取结果。我想按 1-4 个值(稍后会有更多选项)、用户名、ID、电子邮件或日期和时间进行排序。我一直在使用教义来做我的其他查询,但是这个,我就是想不通。
我的问题是,我不知道如何检查哪些值被传递到方法中并且只查询这些值。
例如:
用户在用户名中输入“bob”,在电子邮件字段中输入“bob@example.com”。对于这种情况,我需要教义看起来像这样:
$queryBuilder
->select('*')
->from('m2m_messages')
->where('username = ' . $queryBuilder->createNamedParameter($params[username]))
->andWhere('email = ' . $queryBuilder->createNamedParameter($params[email]))
$query = $queryBuilder->execute();
但我希望它改变,而不是为每个场合单独创建所有副本......如果我想指定 ID 和电子邮件,它应该只采用这些值。
我通过一个数组传递值,该数组只包含我需要在 sql 中使用的搜索词。对于上面的示例,它看起来像这样:
$params [
username => 'bob',
email => 'bob@example.com'
]
我还没有找到一种在我的代码中实现 if(isset) 的方法,它允许我自动只使用我传递给方法的值。
我的目标是能够在任意数量的字段中输入详细信息,输入的值在数组中传递,并且它们的任何组合都被接受并制作到 sql 脚本中,而无需单独编写 20 多个不同的 sql 脚本。
解决方案
像这样的东西?
$queryBuilder
->select('*')
->from('m2m_messages');
if (count($params) > 0) {
$isFirst = true;
foreach ($params as $paramKey => $paramValue) {
if ($isFirst) {
$queryBuilder->where(sprintf('%1$s = %2$s', $paramKey, $queryBuilder->createNamedParameter($paramValue)));
$isFirst = false;
} else {
$queryBuilder->andWhere(sprintf('%1$s = %2$s', $paramKey, $queryBuilder->createNamedParameter($paramValue)));
}
}
}
$query = $queryBuilder->execute();
这个概念是遍历您的参数并添加 where 提供的条件$params
。
推荐阅读
- ionic-framework - 如何在离子存储中执行 find() 和比较值?
- javascript - 如何找出从组件内部单击了哪些组件
- r - 在不存在的日期之间插入累积值:
- c# - 使用 C# 计算不同的节点值
- java - 使用 java commons-imaging 访问 jpeg 标签
- java - 您可以将 jaotc(Java Ahead-of-Time 编译器)与 jlink(模块组装器/优化器来创建运行时映像)一起使用吗?
- azure - QnA Maker 的元数据
- angular - 如何在 Angular App 中使用 @google-cloud/speech node.js 包?
- r - 无法使用 dplyr 数据操作绘制直方图:“x”必须是数字
- jenkins - Jenkins 作业磁盘使用情况