我有一個CMS,允許用戶保存和創建自行車遊覽。每個自行車之旅還有類別,這些類別使用Laravel的多對多關係利用中間樞軸表進行定義。在保存遊覽時,我們不知道遊覽是正在編輯的現有遊程還是新遊程。Laravel 5:如何使用firstOrNew與其他關係字段
我認爲我應該使用Laravel的firstOrNew
方法來保存旅程,和sync
方法來保存類別。然而,所有的教程很簡單地只給路過一個對象的功能,像這樣的例子:
$tour = Tour::firstOrNew($attributes);
但會發生什麼,當我$attributes
還包含額外的東西,像它鏈接到關係表的類別,而且我需要在下一步中保存哪些內容?例如this very good tutorial給出了下面的例子:
$categories = [7, 12, 52, 77];
$tour = Tour::find(2);
$tour->categories()->sync($categories);
但是,如果類別數據是捆綁在一起的旅遊其餘的數據,而不是使用find
我需要使用firstOrNew
創建旅遊會發生什麼?在我實例化遊覽時,是否應該將類別保留在$attributes
中,然後運行sync
,然後在保存遊覽之前取消它們,或者......?有沒有更好的方法來實現這一目標?
編輯:需要明確的是,在我這裏例如$attributes
變量基本上是捆綁在一起 - 就像Laravel /雄辯系統將使用與subequent修改從belongsToMany方法 - 對交易歸還巡演對象數據用戶)。即:這裏是它所包含的內容快照:
array (
'id' => 1,
'uid' => '03ecc797-f47e-493a-a85d-b5c3eb4b9247',
'active' => 1,
'code' => '2-0',
'title' => 'Tour Title',
'url_title' => 'tour_title',
'distance_from' => 20,
'distance_to' => 45,
'price_from' => '135.00',
'price_to' => '425.00',
'created_at' => '2013-12-31 15:23:19',
'updated_at' => '2015-07-24 16:02:50',
'cats' => // This is not a column name!
array (
0 => 1,
1 => 7
),
)
所有這些屬性都在我的旅行團表的列名,比貓等,它通過的hasMany關係引用另一個表。在設置這個對象類之前,我是否需要手動取消它的設置並將其保存爲$tour->save
?
我在找最乾淨的大多數Laravel的方法嗎?
EDIT2:這裏是在圖爾模型中定義的關係:
class Tour extends Model
{
protected $guarded = [];
public function cats(){
return $this->belongsToMany('App\TourCategory', 'tour_cat_assignments', 'tour_id', 'cat_id');
}
}
不知道我是否明白你的觀點。但由於你不提及它...你有沒有嘗試過[水合](https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html#method_hydrate)或[fill](https:// laravel.com/api/5.0/Illuminate/Database/Eloquent/Model.html#method_fill)? – alariva
從來沒有聽說過這些,看起來很有前途 - 謝謝! – Inigo
讓我們貼出! – alariva