Laravel 拉威尔-带关系条件

Laravel 拉威尔-带关系条件,laravel,eloquent,Laravel,Eloquent,试图在模型关系中整合“如果条件”。 但它不起作用 $customer_index = Customer::where('firm_id', $firm_id) ->with(['company', 'tires', 'vehicles']) ->withCount(['tires', 'vehicles']) ->orderBy('id', 'desc'); mycustomer.php模型 public function vehicles()

试图在模型关系中整合“如果条件”。 但它不起作用

    $customer_index = Customer::where('firm_id', $firm_id)
    ->with(['company', 'tires', 'vehicles'])
    ->withCount(['tires', 'vehicles'])
    ->orderBy('id', 'desc');
mycustomer.php模型

public function vehicles()
{
    if(isset($this->company->is_fleet)){
        return $this->hasMany('App\Models\CustomerVehicle', 'fleet_id', 'company_id');
    }
    return $this->hasMany('App\Models\CustomerVehicle');
}

不能用急切加载来实现这种条件

为了保持雄辩的所有好处,你应该分离这些关系

public function company_vehicles()
{
return$this->hasMany(CustomerVehicle::class,'fleet\u id','company\u id');
}
公共功能客户车()
{
返回$this->hasMany(CustomerVehicle::class);
}
//一个收纳急切货物的范围
公共职能部门($query)
{
返回$query->with(['company\u vehicles','customer\u vehicles');
}
您在评论中要求在一键
车辆中加入关系。这就是你可以尝试的方式


用户::车辆()->get()->map(函数($User){
如果(!空($user->customer\u vehicles)){
$user->vehicles=$user->customer\u vehicles;
未设置($user->customer\u车辆);
未设置($user->company\u车辆);
}如果(!空($user->company_车辆))则为else{
$user->vehicles=$user->company\u车辆;
未设置($user->customer\u车辆);
未设置($user->company\u车辆);
}
返回$user;
});

由于在新实例(没有属性)上调用了relation方法,因此使用“急切加载”无法做到这一点。这是否回答了您的问题?非常感谢。但它给出了:调用undefined方法illumb\Database\Eloquent\Builder::getRelated()error。您可以在stacktrace中找到它给出的错误行。您是否正在为CustomerVehicle调用导入use语句,以调用未定义的方法Illumb\Database\Eloquent\Builder::getRelated();vendor/laravel/framework/src/illumb/Support/Traits/ForwardsCalls.php:50我的意思是在stacktrace中查找发生错误的代码行,而不是stackok中的框架组件。它返回2个列表。客户车辆和公司车辆。难道不存在用同一个键返回它们的方法吗?示例:车辆:[{bla bla}]。现在,它给出了客户车辆:[{bla bla}],公司车辆:[{bla bla}]