2014-03-06 32 views
5

據我所知,爲了節省一個外鍵,應該使用相關模型和associate()功能,但是否真的值得的,通過這個保存有多個外鍵的模型在Laravel 4

$user = new User([ 
    'name' => Input::get('name'), 
    'email' => Input::get('email') 
]); 

$language = Language::find(Input::get('language_id'); 
$gender = Gender::find(Input::get('gender_id'); 
$city = City::find(Input::get('city_id'); 

$user->language()->associate($language); 
$user->gender()->associate($gender); 
$user->city()->associate($city); 

$user->save(); 
去的麻煩

當一個人可以簡單地做到這一點?

User::create(Input::all()); 

我覺得我失去了一些東西,也許有一個更簡單和更清潔的處理在控制器(和視圖)外鍵的方式?

回答

0

我真的沒有看到有什麼不對User::create(Input::all());

顯然你會想要一些驗證,但它是做同樣的事情。

我認爲associate()方法更適合您的情況。

例如,假設您有一張表格,用戶可以填寫表格將他們的城市添加到您的應用中,並且這樣做後,他們應該自動分配到該城市。

$city = City::create(Input::all());只會達到您的要求的前半部分,因爲用戶尚未附加,因爲城市沒有user_id列。

你會再需要像做$city->user()->associate(User::find(Auth::user()->id));

+0

感謝您的意見,當然有驗證要求,但這是兩種情況,所以我沒有故意這樣做。也許你是對的,在你的情況下,associate()有更多的含義,但是我認爲我沒有用L4做足夠的事情,但是知道'associate()'何時會派上用場。我願意讓這個問題開放,看看有人是否有更好的解釋/想法。乾杯 – Nicolas

+1

沒問題,也許我們都會學到一些東西。 – user3158900