php - Laravel 急切加载查询问题
问题描述
我在以下查询中有问题。查询返回结果,无需在 Eager 函数内运行条件。尽管我们已经为 $from_code 和 $to_code 赋值,但它并没有附加这些内部条件。它只返回 empperson 表中的所有数据,而不管分配的值 $from_code 和 $to_code 。
$empPersons = Empperson::with(['empmaster' => function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empmaster.empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empmaster.empCode','<=',$to_code);
}
}]);
我的 Empmaster 和 Empperson 模型如下。
Empmaster.php
class Empmaster extends Model
{
protected $table = 'empmaster';
public function empPerson()
{
return $this->hasOne('App\Empperson');
}
}
工作人员.php
class Empperson extends Model
{
protected $table = 'empperson';
public function empMaster()
{
return $this->belongsTo('App\Empmaster','empmaster_id','id');
}
}
解决方案
因此,据我了解,您希望Empperson
使用在这些条件内存在的关系来调节结果。然后你需要使用whereHas
,而不是with
$empPersons = Empperson::whereHas('empmaster', function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
})->get();
with
只会对empmaster
结果运行条件。如果您仍然需要empmaster
结果中的关系,则可以将两者结合起来。
$empPersons = Empperson::whereHas('empmaster', function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
})->with(['empmaster' => function($query) use ($from_code,$to_code){
if($from_code !=""){
$query->where('empCode','>=',$from_code);
}
if($to_code !=""){
$query->where('empCode','<=',$to_code);
}
}])->get();
因此,实际上您可以调节Empperson
并获得所有它们Empmaster
,而不管条件如何。
推荐阅读
- firebase - Flutter firebase_remote_config 是否应该强制更新?
- javascript - 获取承诺的返回值
- apache - 有没有办法用 Prometheus 和 Grafana 监控 Apache 服务器?
- android - Which API is used for end the call or cut the call in android version 23 to 27?
- spring - 在 STS 中创建 Springboot 启动项目时出现以下错误
- python - 如何安全地将用户输入的文件名传递给 ImageMagick?
- reporting-services - SSRS 报告订阅数据过滤器
- python - 了解 protobuff 协议
- r - R如何只留下人口普查地图的外边界?geom_sf,底格里斯河
- ros - rosbag在播放过程中会播放保证数据吗?