【问题标题】:How to eager load multiple belongsTo relationships against the same table?如何针对同一张表急切加载多个 belongsTo 关系?
【发布时间】:2020-04-15 04:48:25
【问题描述】:

使用以下模型,用户与汽车有 2x 关系。两者都指向同一张表,但使用不同的字段(daily_car_id +weekend_car_id):

class User extends Model
    public function dailyCar() {
        return $this->belongsTo(Car::class, 'daily_car_id', 'id');
    }
    public function weekendCar() {
        return $this->belongsTo(Car::class, 'weekend_car_id', 'id');
    }
}

除了急切加载之外,这一切都完美无缺:

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 关系时,有没有办法预先加载?

【问题讨论】:

  • 不,Eloquent 无法跨关系合并查询。
  • 嗯,我想这是有道理的。我可能可以通过运行我自己的查询并将其合并在一起来解决它

标签: laravel laravel-5 eloquent eager-loading


【解决方案1】:

您可以将您的急切负载更改为:

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

【讨论】:

  • 谢谢@Albarra Naufala。你没有错,尽管它并没有真正利用我想要的急切加载。实际上,在我发现急切加载无法直接实现之后,我最终得到了像您这样的解决方案(包装在存储库模式中)。再次感谢
猜你喜欢
  • 2013-12-25
  • 2021-12-01
  • 2022-01-08
  • 1970-01-01
  • 2016-04-25
  • 2018-06-12
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多