首页 > 解决方案 > Laravel Resource whenLoaded 不适用于 hasOne & belongsTo 关系

问题描述

我有一个订单模块,其中客户的关系为,公共功能客户(){

return $this->hasOne(Customer::class, 'id', 'customer_id');

}

我获取订单详细信息的查询是 $orderResponse = Order::find(1);

我的订单资源包括 'customer' => new CustomerResource($this->whenLoaded('customer'))

因此,预期的结果是我应该在没有客户对象的情况下获取所有客户详细信息,因为我在获取订单数据时没有加载它。但它作为回应。在加载集合时,它工作正常,但不适用于 hasOne 关系。

标签: laravel-5

解决方案


不要使用whenLoaded,而是尝试在 Order 资源中为 hasOne 关系使用when :

'customer' => $this->when($this->customer, new CustomerResource($this->customer))

如果您的客户关系不为空,它将与您的 CustomerResource 一起加载。


推荐阅读