【问题标题】:how to define 3 way relationship in Laravel如何在 Laravel 中定义三向关系
【发布时间】:2021-06-16 02:39:07
【问题描述】:

表架构

Items
    id
    name
    :belongsToMany(Addon) // relations

Addons
    id
    name
    :belongsToMany(Item) // relations

addon_item
    addon_id
    item_id

orders
    id
    :hasMany(Item) // relations

item_order
    item_id
    order_id

    name    // extra pivot attr
    price   // extra pivot attr
    qty     // extra pivot attr

现在我如何定义订单->项目和插件之间的关系 这样我就可以像Orders::all()->items()->orderedAddons 一样获得它(这里我只想获得订购的插件,而不是该项目具有的所有插件

【问题讨论】:

    标签: mysql laravel eloquent relational-database


    【解决方案1】:

    您可以使用with() 过滤addons 并使用has() 添加addons 必须具有orders 关系的条件。

    Item::with(['addons' => function ($query) {
        $query->has('items.orders');
    }])
    ->get();
    

    如果您希望所有订单的商品条件相同,可以添加另一个with()

    Order::with(['items' => function ($query) {
        $query->with(['addons' => function ($query) {
            $query->has('items.orders');
        }])
    }])
    ->get();
    

    【讨论】:

    • 实际上我想检索订单详细信息,例如:Orders::with('items')...。这种方式怎么做。
    • @APu 是的,你可以这样做。
    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2018-01-21
    • 2015-08-19
    • 2013-05-27
    • 1970-01-01
    • 2020-04-06
    • 2018-05-05
    相关资源
    最近更新 更多