2017-06-22 70 views
0

我有兩張桌子: 遊客, 遊覽。 (和相應的模型遊客,旅遊)。Laravel同一張桌子之間的一對多和一對一關係

我已經成功地在它們之間建立了多對多的關係。當我

$tour->tourists()->attach($tourist); 

它在表Tour_Tourists創建一個新的記錄。 (tour_id,tourist_id,created_at,updated_at)。它顯示哪些遊客與特定的旅遊一起去。

現在我需要創建另一個實體:買方。買方是支付旅行費用的遊客之一。只有其中一名遊客可以成爲買家。

我已經在這兩種模式建立一個一對一的關係:

<?php 

命名空間應用;

類遊延伸模型 { 公共函數遊客(){

return $this->belongsToMany('App\Tourist') 
    ->withTimestamps(); 

} 

public function buyer() { 

    return $this->hasOne('App\Tourist') 
    ->withTimestamps(); 

} 

}

(和在旅遊模型相同的,除了我改變 '應用\旅遊' 到「應用程序\遊「:

public function buyer() { 

return $this->hasOne('App\Tour') 
->withTimestamps(); 

b UT當我這樣做:

$tour->buyer()->($tourist) 

(其中$旅遊和旅遊$包含從數據庫中相應的記錄),我得到:

BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::withTimestamps()' 

我有我這樣做是完全錯誤的感覺。任何人都可以指出我應該繼續前進的方向嗎?

謝謝。

回答

1

withTimestamps()僅用於belongsToMany,因爲它更新數據透視表的created_at/updated_at字段。 hasOne不會有這種方法。

+0

謝謝德文!但我認爲我的整體做法是錯誤的。你會在我的地方做什麼? –

+0

很難從你寫的數據庫爲買家設置的方式告訴你。我會重寫一個關於你的其他問題的新問題,但要更加清晰和簡潔。 SO的目標是幫助未來的用戶和現有的用戶一樣多,所以好的問題/答案應該集中在一個清晰而簡潔的問題上。 – Devon

+0

好吧,我會嘗試發佈一個新的更好的問題,然後:) –

相關問題