我正在开发一个培训网站,我正在努力想出正确的数据库架构。
我正在努力实现
预订 - >日期 - >代表 - >反馈
我的主要问题是,在查询数据库进行预订时,代表会链接到日期而不是预订,因此会显示所有代表。
表1 - 预订
id
int(11)NOT NULL,表2 - booking_date
date_id
int(11)NOT NULL booking_id
int(11)NOT NULL 表3 - 日期
id
int(11)NOT NULL,表4 - date_delegates
booking_id
int(11)NOT NULL delegate_id
int(11)NOT NULL date_id
int(11)NOT NULL 表5代表
id
int(11)NOT NULL booking_id
int(11)NOT NULL 这些表在日期模型中加入
$这 - >的hasMany('应用软件\模型\代表&#39)
$bookings = $this->bookings
->where('user_id','=',Auth::user()->id)
->with('user','address','dates','dates.course','dates.days','dates.delegates','dates.delegates.feedback')
->orderby('created_at','desc')
->get()
->toArray();
我尝试过hasManyThrough,但它没有给出级联我正在寻找 感谢
答案 0 :(得分:0)
您必须设置关系。
预订模式:
public function dates()
{
return $this->belongsToMany('App\Models\Date', 'booking_date');
}
日期模型:
public function delegates()
{
return $this->belongsToMany('App\Models\Delegate', 'date_delegates');
}
您没有发布反馈的定义方式,但是,考虑到delegate_id
模型中有Feedback
属性,您必须在委托模型中设置此关系:
public function feedbacks()
{
return $this->hasMany('App\Models\Feedback');
}
然后你可以在查询中调用它们。要过滤代表中的booking_id,您可以使用whereHas
功能。考虑到$bId
有一个booking_id
。例如:
$bookings = $this->bookings
->where('user_id','=',Auth::user()->id)
->whereHas('dates', function($q1) use ($bId) {
$q1->whereHas('delegates', function($q2) use ($bId) {
$q2->where('booking_id', $bId);
});
})
->with('user','address','dates',
'dates.course','dates.days',
'dates.delegates','dates.delegates.feedback')
->orderby('created_at','desc')
->get()
->toArray();
由于没有关于user
,address
,course
和days
的信息,我不知道如何设置他们的关系,但这个想法是同样的。