Laravel 如何针对同一个表加载多个belongsTo关系?

Laravel 如何针对同一个表加载多个belongsTo关系?,laravel,laravel-5,eloquent,eager-loading,Laravel,Laravel 5,Eloquent,Eager Loading,在以下模型中,用户与汽车的关系为2倍。两者都指向同一个表,但使用不同的字段(每日车号+周末车号): 除了紧急加载之外,这一切都非常有效: User::with(['dailyCar', 'weekendCar'])->findOrFail($id); 预期的 # 10 is the weekend car id and 12 is the daily SELECT * FROM `car` WHERE `car`.`id` in (10, 12) # 10 is the weekend

在以下模型中,用户与汽车的关系为2倍。两者都指向同一个表,但使用不同的字段(每日车号+周末车号):

除了紧急加载之外,这一切都非常有效:

User::with(['dailyCar', 'weekendCar'])->findOrFail($id);
预期的

# 10 is the weekend car id and 12 is the daily
SELECT * FROM `car` WHERE `car`.`id` in (10, 12)
# 10 is the weekend car id and 12 is the daily
SELECT * FROM `car` WHERE `car`.`id` in (10)
SELECT * FROM `car` WHERE `car`.`id` in (12)
实际结果(不正确或意外)


当对同一个表使用多个belongsTo关系时,有没有一种方法可以快速加载

您可以将您的即时加载更改为:

$user = User::find($id);
$car = Car::where('id', $user->dailyCar->id)->where('id', $user->weekendCar->id)->get();

不,没有一种方法可以让雄辩者跨关系合并查询..嗯,我想这是有道理的。我可能可以通过运行自己的查询并将其合并到一起来解决这个问题谢谢@Albarra Naufala。你没有错,虽然它并没有真正利用我想要的急切加载。事实上,我最终得到了一个类似于您的解决方案(包装在存储库模式中),因为我发现它不可能直接使用急切加载。再次感谢
$user = User::find($id);
$car = Car::where('id', $user->dailyCar->id)->where('id', $user->weekendCar->id)->get();