簡體   English   中英

拉拉維爾; 最優數據庫、模型關系和 Eloquent

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM