多个 Laravel 关系的条件
Conditionals on multiple Laravel relationships
我得到 table 调用 Vehicles
在其模型 Vehicle
中定义了两个关系。
public function type(){
return $this->belongsTo("App\VehiclePivot", 'vehicle_type_id', "id");
}
和
public function workOrganization(){
return $this->belongsTo("App\WorkOrganization", 'workOrganization_id', "id");
}
用作
$vehicles = Vehicle::with("type", "workOrganization");
他们工作得很好。显示每辆车的类型和工作组织。
如果我尝试
$vehicles = Vehicle::whereHas("type", function($query) use($request){
$query->where('name', '=', $request->type);
})->with("type")->get();
或
$vehicles = Vehicle::whereHas("workOrganization", function($query) use($request){
$query->where('name', '=', $request->workOrg);
})->with("workOrganization")->get();
它们也有效。
用户可以输入 type 或 workOrganization,或者两者都输入,或者两者都不输入。
如果一个存在,那么只有那个关系应该“执行”,如果两者都有,那么两个关系都应该执行,如果它们都不存在,那么也应该执行。
可以通过eloquent完成吗?
我觉得你可以用 when
$vehicles = Vehicle::when(!empty($request->workOrg),function ($query) use($request){
$query->whereHas("workOrganization", function($query) use($request){
$query->where('name', '=', $request->workOrg);
});
})->when(!empty($request->type),function ($query) use($request){
$query->whereHas("type", function($query) use($request){
$query->where('name', '=', $request->type);
});
})
->with("workOrganization","type")
->get();
我得到 table 调用 Vehicles
在其模型 Vehicle
中定义了两个关系。
public function type(){
return $this->belongsTo("App\VehiclePivot", 'vehicle_type_id', "id");
}
和
public function workOrganization(){
return $this->belongsTo("App\WorkOrganization", 'workOrganization_id', "id");
}
用作
$vehicles = Vehicle::with("type", "workOrganization");
他们工作得很好。显示每辆车的类型和工作组织。
如果我尝试
$vehicles = Vehicle::whereHas("type", function($query) use($request){
$query->where('name', '=', $request->type);
})->with("type")->get();
或
$vehicles = Vehicle::whereHas("workOrganization", function($query) use($request){
$query->where('name', '=', $request->workOrg);
})->with("workOrganization")->get();
它们也有效。
用户可以输入 type 或 workOrganization,或者两者都输入,或者两者都不输入。
如果一个存在,那么只有那个关系应该“执行”,如果两者都有,那么两个关系都应该执行,如果它们都不存在,那么也应该执行。
可以通过eloquent完成吗?
我觉得你可以用 when
$vehicles = Vehicle::when(!empty($request->workOrg),function ($query) use($request){
$query->whereHas("workOrganization", function($query) use($request){
$query->where('name', '=', $request->workOrg);
});
})->when(!empty($request->type),function ($query) use($request){
$query->whereHas("type", function($query) use($request){
$query->where('name', '=', $request->type);
});
})
->with("workOrganization","type")
->get();