获取关系列HasManyThrough,在响应中设置。

问题描述 投票:0回答:1

我有一个craete会员,用户可以购买一次获得所有用户与他们的会员资格,当他们有购买和到期时,我很困惑,如何得到我的表结构是。

用户模型。

id
membership_id

public function membership() {
    return $this->belongsTo(Membership::class);
}

订单。

id
user_id

public function item() {
    return $this->hasOne(OrderItem::class, 'order_id', '_id');
}

order_item:

order_id
membership_id
created_at
expiration_date

public function membership() {
    return $this->belongsTo(Membership::class, 'membership_id', '_id');
}

public function order() {
    return $this->belongsTo(Order::class, 'order_id', '_id');
}

会员资格。

id
name
type

我想得到的数据在上市时间这样的如何加载关系。

user{
name
email
membership{
        name
        type
        order_item{
                 expiration_date
                 created_at
                 }
           }
}
laravel has-many-through
1个回答
0
投票

在会员模型中创建这个关系。

public function orderitems() {
   return $this->hasOne(OrderItem::class, 'membership_id', 'id');
   //It's upto you to confirm that whether it is a one-to-one or one-to-many relation
}

然后在控制器中你可以做一些事情,如

User::with('membership.orderitems')->get();

更新

或者你可以创建这样的 hasManyThrough 关系,它将为你提供所有与订单_items相关的用户。把这个关系放在User Model里面。

public function items()
{
    return $this->hasManyThrough( //please also check hasOneThrough according to your need
        'App\OrderItem',
        'App\Order',
        'user_id', // Foreign key on order table...
        'order_id', // Foreign key on order_item table...
        'id', // Local key on users table...
        'id' // Local key on order table...
    );
}
© www.soinside.com 2019 - 2024. All rights reserved.