我有一个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
}
}
}
在会员模型中创建这个关系。
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...
);
}