Can't do that sort of conditional with eager loading.
To maintain all benefits of eloquent you should separate the relations
public function company_vehicles() { return $this->hasMany(CustomerVehicle::class, 'fleet_id', 'company_id'); } public function customer_vehicles() { return $this->hasMany(CustomerVehicle::class); } //A scope to tuck away the eager loads public function scopeVehicles($query) { return $query->with(['company_vehicles', 'customer_vehicles']); }
You asked in the comment to club the relations in one key vehicles. This is how you can try
User::vehicles()->get()->map(function($user){ if(!empty($user->customer_vehicles)){ $user->vehicles = $user->customer_vehicles; unset($user->customer_vehicles); unset($user->company_vehicles); } else if(!empty($user->company_vehicles)) { $user->vehicles = $user->company_vehicles; unset($user->customer_vehicles); unset($user->company_vehicles); } return $user; });