如何在关系中建立关系

时间:2018-05-08 13:50:28

标签: php laravel eloquent

我希望使用Laravel雄辩的关系来建立关系中的关系。

这是我试过的: 这是我的订单模型

public function orderProduct()
{
    return $this->hasMany(OrderProduct::class);
}

这是我的OrderProduct模型

public function expiry()
{
    return $this->hasOne(ProductExpiryDate::class);
}

我试图从主订单模型中获取到期日期

$deliveryOrder = Order::find($id);
dd($deliveryOrder->orderProduct()->expiry)

它给我一个错误:

Undefined property: Illuminate\Database\Eloquent\Relations\HasMany::$expiry

请帮帮我。感谢。

2 个答案:

答案 0 :(得分:1)

您尝试做的是与子关系建立关系。

使用以下内容很容易做到:

App\Order::with('OrderProduct.expiry')->get();

从Laravel文档中,您可以找到有关 Nested Eager Loading 的以下内容:

  

要急切加载嵌套关系,您可以使用“dot”语法。例如,让我们在一个Eloquent声明中急切地加载本书的所有作者和作者的所有个人联系人:

$ books = App \ Book :: with('author.contacts') - > get();

答案 1 :(得分:0)

您收到此错误,因为这不是我推荐的急切加载

$deliveryOrder = Order::with('OrderProduct.expiry')->find($id);
dd($deliveryOrder->orderProduct->expiry)

当你使用

时也是如此
$deliveryOrder->orderProduct() // this refers to relationship so 

将其改为此。

$deliveryOrder->orderProduct->expiry

希望这有帮助