2015-01-07 55 views
3

我在Laravel建立以下關係式:Laravel保存一對多的關係

OrderStatus Model 
    - hasMany('Order') 

Order Model 
    - 'belongsTo('OrderStatus'); 

將數據庫設置了一個orders表和order_statuses表。 orders表格有一個order_status_id的字段。

當我保存一個訂單,我通過手動獲取相應的訂單狀態的模式,這樣設置order_status_id

$status = OrderStatus::where(['name'=>'sample_status'])->firstOrFail(); 
$order->order_status_id = $status->id; 
$order->save(); 

我想知道是否有一個內置的功能,要做到這一點,而不是設置order_status_id手動。我已閱讀Laravel文檔中的「附加相關模型」和「關聯模型」,但我無法弄清楚這些是否適合我的用例。我認爲我遇到的問題是我直接使用子模型(訂單),並試圖設置它的父項。有這個功能嗎?

回答

14

當然,你可以這樣做:

$status = OrderStatus::where(['name'=>'sample_status'])->firstOrFail(); 
$order = new Order; 
$order->status()->associate($status); 
$order->save(); 

status()是屬於關聯關係,你可能需要調整這個名字。)

+0

哦,哇,它看起來像工作。我的問題是我沒有在'associate()'後面調用'save()'。所以'associate()'只需更新'$ order'上'order_status_id'字段的值,但實際上並不觸及數據庫? – flyingL123

+0

的確如此:) – lukasgeiter