laravel - Laravel - 具有关系条件
问题描述
试图将“如果条件”整合到模型关系中。但它不起作用。
$customer_index = Customer::where('firm_id', $firm_id)
->with(['company', 'tires', 'vehicles'])
->withCount(['tires', 'vehicles'])
->orderBy('id', 'desc');
我的 Customer.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');
}
解决方案
不能通过急切加载来做那种条件。
为了保持 eloquent 的所有好处,你应该分离关系
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']);
}
您在评论中要求将关系一键连接vehicles
。这是你可以尝试的方法
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;
});
推荐阅读
- reactjs - How to send consumed API response to another component?
- python - ERROR while updating Spreadsheet using python, Google Seets API, v4: got multiple values for argument 'range'
- ios - 我可以在 iPhone 上永久保存和使用我的 Flutter 应用吗?
- python - Python Pandas - 如何为列的每个唯一值仅选择前 N 行
- c# - 发送到 System.Net.Mail.SmtpClient 等文件夹
- javascript - 带有 TypeScript 的 Nuxt.js:类型“y”上不存在属性“x”
- node.js - 过滤为客户选择的属性?
- typescript - 通过 Pulumi 创建 Global Dynamo 表
- .net-core - 如何在 NuGet 包中定义内部程序集?
- react-native - “SKPaymentQueue”没有可见的@interface 声明选择器“presentCodeRedemptionSheet”