Laravel 6: 如何将多个 where 子句添加到关系中
Laravel 6: How to add multiple where caluses into a relationship
我正在尝试使用关系获取实体的用户
$users = $entity->users()->paginate(20);
但现在我想 运行 根据发送到 API 的参数设置多个 where 条件,所以如果我这样做
$users = $entity->users();
//$users->where($where_array)
$users->paginate(20);
我遇到内存不足错误。它首先让所有用户尝试分页(在条件下注释掉)所以我如何将这个查询分成多行并在最后 运行 它而不使用 DB
query
我想做的事情的例子,但取决于发送的参数而不是固定的参数
$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 ....)
从数据库中获取结果,您就可以控制查询生成器并添加许多 'where'
$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();
我正在尝试使用关系获取实体的用户
$users = $entity->users()->paginate(20);
但现在我想 运行 根据发送到 API 的参数设置多个 where 条件,所以如果我这样做
$users = $entity->users();
//$users->where($where_array)
$users->paginate(20);
我遇到内存不足错误。它首先让所有用户尝试分页(在条件下注释掉)所以我如何将这个查询分成多行并在最后 运行 它而不使用 DB
query
我想做的事情的例子,但取决于发送的参数而不是固定的参数
$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 ....)
从数据库中获取结果,您就可以控制查询生成器并添加许多 'where' $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();