[英]Laravel; optimal database, model relationships and Eloquent
我有一個場景,供應商可以為用戶舉辦研討會。
每個研討會都需要有可用性(這是基於日期的 - 例如,研討會可能在 22 日和/或 27 日等)。
一個研討會可以有多個可用性——也就是說,同一個研討會可以運行很多天。
為了讓用戶參加研討會,他們需要預約——也就是說,他們選擇他們將參加的可用日期。
為了進行預訂,他們需要進行交易。
一筆交易可以用於多次預訂——就像用戶可以通過一筆交易支付多個研討會的費用一樣。
用戶只能預訂每個研討會。
目前我有以下內容:
可用性模型具有:
public function workshops()
{
return $this->belongsTo(Workshop::class, 'workshop_id');
}
public function bookings()
{
return $this->hasMany(Booking::class, 'availabilities_id');
}
預訂模型具有:
public function vendorAvailability()
{
return $this->hasOne(\App\Availability::class, 'id', 'availabilities_id');
}
public function transactions()
{
return $this->hasOne(\App\Transaction::class, 'id', 'transaction_id');
}
交易模型有:
public function bookings()
{
return $this->hasMany(\App\Booking::class, 'id', 'transaction_id');
}
表結構如下所示:
`workshops`
`id`
`vendor_id`
`workshop_cost`
`workshop_name`
`availabilities`
`id`
`vendor_id`
`workshop_id`
`name`
`start_time`
`bookings`
`id`
`user_id`
`availabilities_id`
`transaction_id`
`workshop_id`
`is_completed_vendor`
`is_completed_user`
`transactions`
`id`
`user_id`
`vendor_id`
`workshop_id`
`status`
我的查詢目前如下所示:
$ListWorkshops = Availability::with(['workshops','bookings'])
->where('vendor_id', $vendor_id)
->get();
我希望能夠在供應商的儀表板上顯示信息。 具體來說,我希望顯示一個包含以下內容的列表:
Workshops
Availabilities
Bookings per availabilities - is_completed_vendor, is_completed_user - status
其中“is_completed_vendor, is_completed_user”是預訂表上的布爾字段,一旦研討會完成,供應商和用戶將分別標記為“y”。 狀態來自交易表,並且在研討會完成后也會更新。
因此,示例列表可能如下所示:
Explaining code to beginners
May, 21
Violet Dickinson - y, y - complete
Savanna Avalos - y, y - complete
Luc Stephens - y, y - complete
May, 28
Bryan Nicholls - y, y - complete
Gareth Patterson - y, y - complete
More code for endusers
July, 21
Ricky Molloy - n, n - pending
Blanche Sparks - n, n - pending
July, 28
Raphael Trejo - n, n - pending
Tina Lopez - n, n - pending
Susan Wallace - n, n - pending
編輯:
在上面的所需列表中,我已在事務表的狀態字段中添加。 這與預訂表有關,但我沒有得到返回。 我在預訂表上有一個外鍵:
CONSTRAINT `bookings_transaction_id_foreign` FOREIGN KEY (`transaction_id`) REFERENCES `transactions` (`id`)
但是,當我 dd($ListWorkshops) 未顯示該狀態時,即沒有顯示預訂結果的關系
0 => App\Availability {#2753 ▼
#table: "availabilities"
#attributes: array:16 [▶]
#relations: array:2 [▼
"workshops" => App\Workshop {#2749 ▶}
"bookings" => Illuminate\Database\Eloquent\Collection {#2575 ▼
#items: array:2 [▼
0 => App\Booking {#2744 ▼
#table: "bookings"
#attributes: array:17 [▶]
#relations: [] --> I need transaction details to show here
}
]
}
]
}
如果我這樣做:
$ListWorkshops = Availability::with(['workshops','bookings' ])
->where('vendor_id', $vendor_id)
->where('availabilities.workshop_id', '>', '0')
->join('bookings', 'bookings.availabilities_id', '=', 'availabilities.id')
->join('transactions', 'bookings.transaction_id', '=', 'transactions.id')
->get();
然后我可以獲得交易狀態,但不能遍歷預訂,因為它是空的,因此顯然不適合我的需要。
所以我的問題是 - 我需要做什么才能從交易表中引入狀態字段,以便我可以遍歷預訂並返回交易狀態?
只需要急切加載關系 - 添加“bookings.transactions”如下:
$ListWorkshops = Availability::with(['workshops','bookings','bookings.transactions'])
->where('vendor_id', $vendor_id)
->where('availabilities.workshop_id', '>', '0')
->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.