php - Laravel 6:如何在关系中添加多个位置
问题描述
我正在尝试使用该关系来获取实体用户
$users = $entity->users()->paginate(20);
但现在我想根据发送到 API 的参数运行多个 where 条件,所以如果我这样做
$users = $entity->users();
//$users->where($where_array)
$users->paginate(20);
我内存不足错误。它首先获取所有用户,然后尝试分页(在 where 条件中注释掉)所以我如何将此查询拆分为多行并在最后运行它而不使用DB
查询
我想要做的示例,但取决于发送的参数而不是固定参数
$user->posts()
->where('active', 1)
->orWhere('votes', '>=', 100)
->get();
所以我检查
if(!empty($request->first_name)){
->where('first_name', 'like', '%'.$request->first_name.'%')
}
等等。我试过这个
$where = "";
$like_parameters = array(
'first_name', 'last_name', 'email', 'phone'
);
foreach ($like_parameters as $parameter){
if(isset($request->$parameter) &&!empty($request->$parameter)){
$where .= "->where('$request->$parameter', 'like', '%'.$request->$parameter.'%')";
}
}
$users = $entity->users().$where->paginate($per_page);
我得到Call to a member function paginate() on string
了,所以我想绑定$where
到查询,但不是作为字符串,而是作为该查询本身的一部分。
解决方案
只要您没有使用 (get,find ....) 从数据库中获取结果,您就可以控制查询构建器并添加许多“位置”
$query= $user->posts()
->where('active', 1)
->orWhere('votes', '>=', 100);
if(!empty($request->first_name)){
$query=$query->where('first_name', 'like', '%'.$request->first_name.'%');
}
当您设置所有条件并根据需要构建查询时,您可以获取结果:
$results=$query->get();
推荐阅读
- apache-kafka - Kafka Streams - 从 KTable 中消失的值
- tcpdump - TCP Dump 命令仅用于从 2 个特定接口捕获
- python - 使用正则表达式 pandas 调用特定列
- powerbi - 列出 PowerBi 表格中使用的所有属性度量
- xml - 如何将json数据转换为xml并读取xml数据并在html5中绘制一个矩形?
- xml - 从 log4j2 xml 中的完整路径获取文件名
- objective-c - 在objective-c的另一个cls + load方法中创建单个实例是否正确?
- javascript - 获取元素属性
- c# - 调用函数后在文本框中显示文本
- cassandra - Cassandra 2.1 将飞贼从 EC2Snitch 更改为 GossipingPropertyFileSnitch